rename "sp" to "spc", avoid conflict with 4510 opcodes
This commit is contained in:
@@ -218,7 +218,7 @@ void g_preamble (void)
|
||||
AddTextLine ("\t.debuginfo\t%s", (DebugInfo != 0)? "on" : "off");
|
||||
|
||||
/* Import zero page variables */
|
||||
AddTextLine ("\t.importzp\tsp, sreg, regsave, regbank");
|
||||
AddTextLine ("\t.importzp\tspc, sreg, regsave, regbank");
|
||||
AddTextLine ("\t.importzp\ttmp1, tmp2, tmp3, tmp4, ptr1, ptr2, ptr3, ptr4");
|
||||
|
||||
/* Define long branch macros */
|
||||
@@ -569,11 +569,11 @@ void g_swap_regvars (int StackOffs, int RegOffs, unsigned Bytes)
|
||||
AddCodeLine ("ldx #$%02X", RegOffs & 0xFF);
|
||||
AddCodeLine ("jsr regswap1");
|
||||
} else {
|
||||
AddCodeLine ("lda (sp),y");
|
||||
AddCodeLine ("lda (spc),y");
|
||||
AddCodeLine ("ldx regbank%+d", RegOffs);
|
||||
AddCodeLine ("sta regbank%+d", RegOffs);
|
||||
AddCodeLine ("txa");
|
||||
AddCodeLine ("sta (sp),y");
|
||||
AddCodeLine ("sta (spc),y");
|
||||
}
|
||||
|
||||
} else if (Bytes == 2) {
|
||||
@@ -615,7 +615,7 @@ void g_save_regvars (int RegOffs, unsigned Bytes)
|
||||
AddCodeLine ("ldx #$%02X", (unsigned char) Bytes);
|
||||
g_defcodelabel (Label);
|
||||
AddCodeLine ("lda regbank%+d,x", RegOffs-1);
|
||||
AddCodeLine ("sta (sp),y");
|
||||
AddCodeLine ("sta (spc),y");
|
||||
AddCodeLine ("dey");
|
||||
AddCodeLine ("dex");
|
||||
AddCodeLine ("bne %s", LocalLabelName (Label));
|
||||
@@ -639,28 +639,28 @@ void g_restore_regvars (int StackOffs, int RegOffs, unsigned Bytes)
|
||||
if (Bytes == 1) {
|
||||
|
||||
AddCodeLine ("ldy #$%02X", StackOffs);
|
||||
AddCodeLine ("lda (sp),y");
|
||||
AddCodeLine ("lda (spc),y");
|
||||
AddCodeLine ("sta regbank%+d", RegOffs);
|
||||
|
||||
} else if (Bytes == 2) {
|
||||
|
||||
AddCodeLine ("ldy #$%02X", StackOffs);
|
||||
AddCodeLine ("lda (sp),y");
|
||||
AddCodeLine ("lda (spc),y");
|
||||
AddCodeLine ("sta regbank%+d", RegOffs);
|
||||
AddCodeLine ("iny");
|
||||
AddCodeLine ("lda (sp),y");
|
||||
AddCodeLine ("lda (spc),y");
|
||||
AddCodeLine ("sta regbank%+d", RegOffs+1);
|
||||
|
||||
} else if (Bytes == 3 && IS_Get (&CodeSizeFactor) >= 133) {
|
||||
|
||||
AddCodeLine ("ldy #$%02X", StackOffs);
|
||||
AddCodeLine ("lda (sp),y");
|
||||
AddCodeLine ("lda (spc),y");
|
||||
AddCodeLine ("sta regbank%+d", RegOffs);
|
||||
AddCodeLine ("iny");
|
||||
AddCodeLine ("lda (sp),y");
|
||||
AddCodeLine ("lda (spc),y");
|
||||
AddCodeLine ("sta regbank%+d", RegOffs+1);
|
||||
AddCodeLine ("iny");
|
||||
AddCodeLine ("lda (sp),y");
|
||||
AddCodeLine ("lda (spc),y");
|
||||
AddCodeLine ("sta regbank%+d", RegOffs+2);
|
||||
|
||||
} else if (StackOffs <= RegOffs) {
|
||||
@@ -672,7 +672,7 @@ void g_restore_regvars (int StackOffs, int RegOffs, unsigned Bytes)
|
||||
unsigned Label = GetLocalLabel ();
|
||||
AddCodeLine ("ldy #$%02X", StackOffs);
|
||||
g_defcodelabel (Label);
|
||||
AddCodeLine ("lda (sp),y");
|
||||
AddCodeLine ("lda (spc),y");
|
||||
AddCodeLine ("sta regbank%+d,y", RegOffs - StackOffs);
|
||||
AddCodeLine ("iny");
|
||||
AddCodeLine ("cpy #$%02X", StackOffs + Bytes);
|
||||
@@ -688,7 +688,7 @@ void g_restore_regvars (int StackOffs, int RegOffs, unsigned Bytes)
|
||||
AddCodeLine ("ldy #$%02X", (unsigned char) (StackOffs + Bytes - 1));
|
||||
AddCodeLine ("ldx #$%02X", (unsigned char) (Bytes - 1));
|
||||
g_defcodelabel (Label);
|
||||
AddCodeLine ("lda (sp),y");
|
||||
AddCodeLine ("lda (spc),y");
|
||||
AddCodeLine ("sta regbank%+d,x", RegOffs);
|
||||
AddCodeLine ("dey");
|
||||
AddCodeLine ("dex");
|
||||
@@ -834,11 +834,11 @@ void g_getlocal (unsigned Flags, int Offs)
|
||||
CheckLocalOffs (Offs);
|
||||
if ((Flags & CF_FORCECHAR) || (Flags & CF_TEST)) {
|
||||
AddCodeLine ("ldy #$%02X", Offs);
|
||||
AddCodeLine ("lda (sp),y");
|
||||
AddCodeLine ("lda (spc),y");
|
||||
} else {
|
||||
AddCodeLine ("ldy #$%02X", Offs);
|
||||
AddCodeLine ("ldx #$00");
|
||||
AddCodeLine ("lda (sp),y");
|
||||
AddCodeLine ("lda (spc),y");
|
||||
if ((Flags & CF_UNSIGNED) == 0) {
|
||||
unsigned L = GetLocalLabel();
|
||||
AddCodeLine ("bpl %s", LocalLabelName (L));
|
||||
@@ -852,9 +852,9 @@ void g_getlocal (unsigned Flags, int Offs)
|
||||
CheckLocalOffs (Offs + 1);
|
||||
AddCodeLine ("ldy #$%02X", (unsigned char) (Offs+1));
|
||||
if (Flags & CF_TEST) {
|
||||
AddCodeLine ("lda (sp),y");
|
||||
AddCodeLine ("lda (spc),y");
|
||||
AddCodeLine ("dey");
|
||||
AddCodeLine ("ora (sp),y");
|
||||
AddCodeLine ("ora (spc),y");
|
||||
} else {
|
||||
AddCodeLine ("jsr ldaxysp");
|
||||
}
|
||||
@@ -935,7 +935,7 @@ void g_leasp (int Offs)
|
||||
{
|
||||
unsigned char Lo, Hi;
|
||||
|
||||
/* Calculate the offset relative to sp */
|
||||
/* Calculate the offset relative to spc */
|
||||
Offs -= StackPtr;
|
||||
|
||||
/* Get low and high byte */
|
||||
@@ -945,17 +945,17 @@ void g_leasp (int Offs)
|
||||
/* Generate code */
|
||||
if (Lo == 0) {
|
||||
if (Hi <= 3) {
|
||||
AddCodeLine ("lda sp");
|
||||
AddCodeLine ("ldx sp+1");
|
||||
AddCodeLine ("lda spc");
|
||||
AddCodeLine ("ldx spc+1");
|
||||
while (Hi--) {
|
||||
AddCodeLine ("inx");
|
||||
}
|
||||
} else {
|
||||
AddCodeLine ("lda sp+1");
|
||||
AddCodeLine ("lda spc+1");
|
||||
AddCodeLine ("clc");
|
||||
AddCodeLine ("adc #$%02X", Hi);
|
||||
AddCodeLine ("tax");
|
||||
AddCodeLine ("lda sp");
|
||||
AddCodeLine ("lda spc");
|
||||
}
|
||||
} else if (Hi == 0) {
|
||||
/* 8 bit offset */
|
||||
@@ -966,8 +966,8 @@ void g_leasp (int Offs)
|
||||
} else {
|
||||
/* 8 bit offset inlined */
|
||||
unsigned L = GetLocalLabel ();
|
||||
AddCodeLine ("lda sp");
|
||||
AddCodeLine ("ldx sp+1");
|
||||
AddCodeLine ("lda spc");
|
||||
AddCodeLine ("ldx spc+1");
|
||||
AddCodeLine ("clc");
|
||||
AddCodeLine ("adc #$%02X", Lo);
|
||||
AddCodeLine ("bcc %s", LocalLabelName (L));
|
||||
@@ -981,11 +981,11 @@ void g_leasp (int Offs)
|
||||
AddCodeLine ("jsr leaaxsp");
|
||||
} else {
|
||||
/* Full 16 bit offset inlined */
|
||||
AddCodeLine ("lda sp");
|
||||
AddCodeLine ("lda spc");
|
||||
AddCodeLine ("clc");
|
||||
AddCodeLine ("adc #$%02X", Lo);
|
||||
AddCodeLine ("pha");
|
||||
AddCodeLine ("lda sp+1");
|
||||
AddCodeLine ("lda spc+1");
|
||||
AddCodeLine ("adc #$%02X", Hi);
|
||||
AddCodeLine ("tax");
|
||||
AddCodeLine ("pla");
|
||||
@@ -1001,10 +1001,10 @@ void g_leavariadic (int Offs)
|
||||
{
|
||||
unsigned ArgSizeOffs;
|
||||
|
||||
/* Calculate the offset relative to sp */
|
||||
/* Calculate the offset relative to spc */
|
||||
Offs -= StackPtr;
|
||||
|
||||
/* Get the offset of the parameter which is stored at sp+0 on function
|
||||
/* Get the offset of the parameter which is stored at spc+0 on function
|
||||
** entry and check if this offset is reachable with a byte offset.
|
||||
*/
|
||||
CHECK (StackPtr <= 0);
|
||||
@@ -1013,14 +1013,14 @@ void g_leavariadic (int Offs)
|
||||
|
||||
/* Get the size of all parameters. */
|
||||
AddCodeLine ("ldy #$%02X", ArgSizeOffs);
|
||||
AddCodeLine ("lda (sp),y");
|
||||
AddCodeLine ("lda (spc),y");
|
||||
|
||||
/* Add the value of the stackpointer */
|
||||
if (IS_Get (&CodeSizeFactor) > 250) {
|
||||
unsigned L = GetLocalLabel();
|
||||
AddCodeLine ("ldx sp+1");
|
||||
AddCodeLine ("ldx spc+1");
|
||||
AddCodeLine ("clc");
|
||||
AddCodeLine ("adc sp");
|
||||
AddCodeLine ("adc spc");
|
||||
AddCodeLine ("bcc %s", LocalLabelName (L));
|
||||
AddCodeLine ("inx");
|
||||
g_defcodelabel (L);
|
||||
@@ -1092,14 +1092,14 @@ void g_putlocal (unsigned Flags, int Offs, long Val)
|
||||
AddCodeLine ("lda #$%02X", (unsigned char) Val);
|
||||
}
|
||||
AddCodeLine ("ldy #$%02X", Offs);
|
||||
AddCodeLine ("sta (sp),y");
|
||||
AddCodeLine ("sta (spc),y");
|
||||
break;
|
||||
|
||||
case CF_INT:
|
||||
if (Flags & CF_CONST) {
|
||||
AddCodeLine ("ldy #$%02X", Offs+1);
|
||||
AddCodeLine ("lda #$%02X", (unsigned char) (Val >> 8));
|
||||
AddCodeLine ("sta (sp),y");
|
||||
AddCodeLine ("sta (spc),y");
|
||||
if ((Flags & CF_NOKEEP) == 0) {
|
||||
/* Place high byte into X */
|
||||
AddCodeLine ("tax");
|
||||
@@ -1112,16 +1112,16 @@ void g_putlocal (unsigned Flags, int Offs, long Val)
|
||||
AddCodeLine ("dey");
|
||||
AddCodeLine ("lda #$%02X", (unsigned char) Val);
|
||||
}
|
||||
AddCodeLine ("sta (sp),y");
|
||||
AddCodeLine ("sta (spc),y");
|
||||
} else {
|
||||
AddCodeLine ("ldy #$%02X", Offs);
|
||||
if ((Flags & CF_NOKEEP) == 0 || IS_Get (&CodeSizeFactor) < 160) {
|
||||
AddCodeLine ("jsr staxysp");
|
||||
} else {
|
||||
AddCodeLine ("sta (sp),y");
|
||||
AddCodeLine ("sta (spc),y");
|
||||
AddCodeLine ("iny");
|
||||
AddCodeLine ("txa");
|
||||
AddCodeLine ("sta (sp),y");
|
||||
AddCodeLine ("sta (spc),y");
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -1161,12 +1161,12 @@ void g_putind (unsigned Flags, unsigned Offs)
|
||||
AddCodeLine ("pha");
|
||||
}
|
||||
AddCodeLine ("lda #$%02X", Offs & 0xFF);
|
||||
AddCodeLine ("adc (sp),y");
|
||||
AddCodeLine ("sta (sp),y");
|
||||
AddCodeLine ("adc (spc),y");
|
||||
AddCodeLine ("sta (spc),y");
|
||||
AddCodeLine ("iny");
|
||||
AddCodeLine ("lda #$%02X", (Offs >> 8) & 0xFF);
|
||||
AddCodeLine ("adc (sp),y");
|
||||
AddCodeLine ("sta (sp),y");
|
||||
AddCodeLine ("adc (spc),y");
|
||||
AddCodeLine ("sta (spc),y");
|
||||
if ((Flags & CF_NOKEEP) == 0) {
|
||||
AddCodeLine ("pla");
|
||||
}
|
||||
@@ -1183,8 +1183,8 @@ void g_putind (unsigned Flags, unsigned Offs)
|
||||
AddCodeLine ("pha");
|
||||
}
|
||||
AddCodeLine ("lda #$%02X", (Offs >> 8) & 0xFF);
|
||||
AddCodeLine ("adc (sp),y");
|
||||
AddCodeLine ("sta (sp),y");
|
||||
AddCodeLine ("adc (spc),y");
|
||||
AddCodeLine ("sta (spc),y");
|
||||
if ((Flags & CF_NOKEEP) == 0) {
|
||||
AddCodeLine ("pla");
|
||||
}
|
||||
@@ -1618,7 +1618,7 @@ void g_addlocal (unsigned flags, int offs)
|
||||
L = GetLocalLabel();
|
||||
AddCodeLine ("ldy #$%02X", NewOff & 0xFF);
|
||||
AddCodeLine ("clc");
|
||||
AddCodeLine ("adc (sp),y");
|
||||
AddCodeLine ("adc (spc),y");
|
||||
AddCodeLine ("bcc %s", LocalLabelName (L));
|
||||
AddCodeLine ("inx");
|
||||
g_defcodelabel (L);
|
||||
@@ -1627,11 +1627,11 @@ void g_addlocal (unsigned flags, int offs)
|
||||
case CF_INT:
|
||||
AddCodeLine ("ldy #$%02X", NewOff & 0xFF);
|
||||
AddCodeLine ("clc");
|
||||
AddCodeLine ("adc (sp),y");
|
||||
AddCodeLine ("adc (spc),y");
|
||||
AddCodeLine ("pha");
|
||||
AddCodeLine ("txa");
|
||||
AddCodeLine ("iny");
|
||||
AddCodeLine ("adc (sp),y");
|
||||
AddCodeLine ("adc (spc),y");
|
||||
AddCodeLine ("tax");
|
||||
AddCodeLine ("pla");
|
||||
break;
|
||||
@@ -1839,12 +1839,12 @@ void g_addeqlocal (unsigned flags, int Offs, unsigned long val)
|
||||
if (flags & CF_CONST) {
|
||||
AddCodeLine ("clc");
|
||||
AddCodeLine ("lda #$%02X", (int)(val & 0xFF));
|
||||
AddCodeLine ("adc (sp),y");
|
||||
AddCodeLine ("sta (sp),y");
|
||||
AddCodeLine ("adc (spc),y");
|
||||
AddCodeLine ("sta (spc),y");
|
||||
} else {
|
||||
AddCodeLine ("clc");
|
||||
AddCodeLine ("adc (sp),y");
|
||||
AddCodeLine ("sta (sp),y");
|
||||
AddCodeLine ("adc (spc),y");
|
||||
AddCodeLine ("sta (spc),y");
|
||||
}
|
||||
if ((flags & CF_UNSIGNED) == 0) {
|
||||
unsigned L = GetLocalLabel();
|
||||
@@ -1862,16 +1862,16 @@ void g_addeqlocal (unsigned flags, int Offs, unsigned long val)
|
||||
if (IS_Get (&CodeSizeFactor) >= 400) {
|
||||
AddCodeLine ("clc");
|
||||
AddCodeLine ("lda #$%02X", (int)(val & 0xFF));
|
||||
AddCodeLine ("adc (sp),y");
|
||||
AddCodeLine ("sta (sp),y");
|
||||
AddCodeLine ("adc (spc),y");
|
||||
AddCodeLine ("sta (spc),y");
|
||||
AddCodeLine ("iny");
|
||||
AddCodeLine ("lda #$%02X", (int) ((val >> 8) & 0xFF));
|
||||
AddCodeLine ("adc (sp),y");
|
||||
AddCodeLine ("sta (sp),y");
|
||||
AddCodeLine ("adc (spc),y");
|
||||
AddCodeLine ("sta (spc),y");
|
||||
if ((flags & CF_NOKEEP) == 0) {
|
||||
AddCodeLine ("tax");
|
||||
AddCodeLine ("dey");
|
||||
AddCodeLine ("lda (sp),y");
|
||||
AddCodeLine ("lda (spc),y");
|
||||
}
|
||||
} else {
|
||||
g_getimmed (flags, val, 0);
|
||||
@@ -1923,7 +1923,7 @@ void g_addeqind (unsigned flags, unsigned offs, unsigned long val)
|
||||
case CF_INT:
|
||||
case CF_LONG:
|
||||
AddCodeLine ("jsr pushax"); /* Push the address */
|
||||
push (CF_PTR); /* Correct the internal sp */
|
||||
push (CF_PTR); /* Correct the internal spc */
|
||||
g_getind (flags, offs); /* Fetch the value */
|
||||
g_inc (flags, val); /* Increment value in primary */
|
||||
g_putind (flags, offs); /* Store the value back */
|
||||
@@ -2089,15 +2089,15 @@ void g_subeqlocal (unsigned flags, int Offs, unsigned long val)
|
||||
AddCodeLine ("ldy #$%02X", Offs);
|
||||
AddCodeLine ("ldx #$00");
|
||||
if (flags & CF_CONST) {
|
||||
AddCodeLine ("lda (sp),y");
|
||||
AddCodeLine ("lda (spc),y");
|
||||
AddCodeLine ("sec");
|
||||
AddCodeLine ("sbc #$%02X", (unsigned char)val);
|
||||
} else {
|
||||
AddCodeLine ("eor #$FF");
|
||||
AddCodeLine ("sec");
|
||||
AddCodeLine ("adc (sp),y");
|
||||
AddCodeLine ("adc (spc),y");
|
||||
}
|
||||
AddCodeLine ("sta (sp),y");
|
||||
AddCodeLine ("sta (spc),y");
|
||||
if ((flags & CF_UNSIGNED) == 0) {
|
||||
unsigned L = GetLocalLabel();
|
||||
AddCodeLine ("bpl %s", LocalLabelName (L));
|
||||
@@ -2157,7 +2157,7 @@ void g_subeqind (unsigned flags, unsigned offs, unsigned long val)
|
||||
case CF_INT:
|
||||
case CF_LONG:
|
||||
AddCodeLine ("jsr pushax"); /* Push the address */
|
||||
push (CF_PTR); /* Correct the internal sp */
|
||||
push (CF_PTR); /* Correct the internal spc */
|
||||
g_getind (flags, offs); /* Fetch the value */
|
||||
g_dec (flags, val); /* Increment value in primary */
|
||||
g_putind (flags, offs); /* Store the value back */
|
||||
@@ -2208,10 +2208,10 @@ void g_addaddr_local (unsigned flags attribute ((unused)), int offs)
|
||||
/* Label was used above */
|
||||
g_defcodelabel (L);
|
||||
}
|
||||
AddCodeLine ("adc sp");
|
||||
AddCodeLine ("adc spc");
|
||||
AddCodeLine ("tay");
|
||||
AddCodeLine ("txa");
|
||||
AddCodeLine ("adc sp+1");
|
||||
AddCodeLine ("adc spc+1");
|
||||
AddCodeLine ("tax");
|
||||
AddCodeLine ("tya");
|
||||
}
|
||||
@@ -2512,10 +2512,10 @@ void g_callind (unsigned Flags, unsigned ArgSize, int Offs)
|
||||
CheckLocalOffs (Offs);
|
||||
AddCodeLine ("pha");
|
||||
AddCodeLine ("ldy #$%02X", Offs);
|
||||
AddCodeLine ("lda (sp),y");
|
||||
AddCodeLine ("lda (spc),y");
|
||||
AddCodeLine ("sta jmpvec+1");
|
||||
AddCodeLine ("iny");
|
||||
AddCodeLine ("lda (sp),y");
|
||||
AddCodeLine ("lda (spc),y");
|
||||
AddCodeLine ("sta jmpvec+2");
|
||||
AddCodeLine ("pla");
|
||||
AddCodeLine ("jsr jmpvec");
|
||||
@@ -2573,11 +2573,11 @@ void g_lateadjustSP (unsigned label)
|
||||
AddCodeLine ("pha");
|
||||
AddCodeLine ("lda %s", LocalDataLabelName (label));
|
||||
AddCodeLine ("clc");
|
||||
AddCodeLine ("adc sp");
|
||||
AddCodeLine ("sta sp");
|
||||
AddCodeLine ("adc spc");
|
||||
AddCodeLine ("sta spc");
|
||||
AddCodeLine ("lda %s+1", LocalDataLabelName (label));
|
||||
AddCodeLine ("adc sp+1");
|
||||
AddCodeLine ("sta sp+1");
|
||||
AddCodeLine ("adc spc+1");
|
||||
AddCodeLine ("sta spc+1");
|
||||
AddCodeLine ("pla");
|
||||
}
|
||||
|
||||
@@ -2591,11 +2591,11 @@ void g_drop (unsigned Space)
|
||||
AddCodeLine ("pha");
|
||||
AddCodeLine ("lda #$%02X", (unsigned char) Space);
|
||||
AddCodeLine ("clc");
|
||||
AddCodeLine ("adc sp");
|
||||
AddCodeLine ("sta sp");
|
||||
AddCodeLine ("adc spc");
|
||||
AddCodeLine ("sta spc");
|
||||
AddCodeLine ("lda #$%02X", (unsigned char) (Space >> 8));
|
||||
AddCodeLine ("adc sp+1");
|
||||
AddCodeLine ("sta sp+1");
|
||||
AddCodeLine ("adc spc+1");
|
||||
AddCodeLine ("sta spc+1");
|
||||
AddCodeLine ("pla");
|
||||
} else if (Space > 8) {
|
||||
AddCodeLine ("ldy #$%02X", Space);
|
||||
@@ -2618,13 +2618,13 @@ void g_space (int Space)
|
||||
** overhead.
|
||||
*/
|
||||
AddCodeLine ("pha");
|
||||
AddCodeLine ("lda sp");
|
||||
AddCodeLine ("lda spc");
|
||||
AddCodeLine ("sec");
|
||||
AddCodeLine ("sbc #$%02X", (unsigned char) Space);
|
||||
AddCodeLine ("sta sp");
|
||||
AddCodeLine ("lda sp+1");
|
||||
AddCodeLine ("sta spc");
|
||||
AddCodeLine ("lda spc+1");
|
||||
AddCodeLine ("sbc #$%02X", (unsigned char) (Space >> 8));
|
||||
AddCodeLine ("sta sp+1");
|
||||
AddCodeLine ("sta spc+1");
|
||||
AddCodeLine ("pla");
|
||||
} else if (Space > 8) {
|
||||
AddCodeLine ("ldy #$%02X", Space);
|
||||
@@ -4584,14 +4584,14 @@ void g_initauto (unsigned Label, unsigned Size)
|
||||
AddCodeLine ("ldy #$%02X", Size-1);
|
||||
g_defcodelabel (CodeLabel);
|
||||
AddCodeLine ("lda %s,y", GetLabelName (CF_STATIC, Label, 0));
|
||||
AddCodeLine ("sta (sp),y");
|
||||
AddCodeLine ("sta (spc),y");
|
||||
AddCodeLine ("dey");
|
||||
AddCodeLine ("bpl %s", LocalLabelName (CodeLabel));
|
||||
} else if (Size <= 256) {
|
||||
AddCodeLine ("ldy #$00");
|
||||
g_defcodelabel (CodeLabel);
|
||||
AddCodeLine ("lda %s,y", GetLabelName (CF_STATIC, Label, 0));
|
||||
AddCodeLine ("sta (sp),y");
|
||||
AddCodeLine ("sta (spc),y");
|
||||
AddCodeLine ("iny");
|
||||
AddCmpCodeIfSizeNot256 ("cpy #$%02X", Size);
|
||||
AddCodeLine ("bne %s", LocalLabelName (CodeLabel));
|
||||
|
||||
@@ -390,8 +390,8 @@ static const ZPInfo ZPInfoTable[] = {
|
||||
{ 7, "regbank", 6, REG_NONE, REG_NONE },
|
||||
{ 0, "regsave", 4, REG_SAVE_LO, REG_SAVE },
|
||||
{ 0, "regsave+1", 3, REG_SAVE_HI, REG_SAVE },
|
||||
{ 0, "sp", 2, REG_SP_LO, REG_SP },
|
||||
{ 0, "sp+1", 1, REG_SP_HI, REG_SP },
|
||||
{ 0, "spc", 2, REG_SP_LO, REG_SP },
|
||||
{ 0, "spc+1", 1, REG_SP_HI, REG_SP },
|
||||
{ 0, "sreg", 2, REG_SREG_LO, REG_SREG },
|
||||
{ 0, "sreg+1", 1, REG_SREG_HI, REG_SREG },
|
||||
{ 0, "tmp1", 1, REG_TMP1, REG_TMP1 },
|
||||
|
||||
@@ -75,8 +75,8 @@ struct RegContents;
|
||||
#define REG_SP_HI 0x2000U
|
||||
|
||||
/* Defines for some special register usage */
|
||||
#define SLV_IND 0x00010000U /* Accesses (sp),y */
|
||||
#define SLV_TOP 0x00020000U /* Accesses (sp),0 */
|
||||
#define SLV_IND 0x00010000U /* Accesses (spc),y */
|
||||
#define SLV_TOP 0x00020000U /* Accesses (spc),0 */
|
||||
#define SLV_SP65 0x00200000U /* Accesses 6502 stack pointer */
|
||||
#define SLV_PH65 0x00400000U /* Pushes onto 6502 stack */
|
||||
#define SLV_PL65 0x00800000U /* Pops from 6502 stack */
|
||||
|
||||
@@ -810,7 +810,7 @@ static unsigned RunOptGroup5 (CodeSeg* S)
|
||||
|
||||
|
||||
static unsigned RunOptGroup6 (CodeSeg* S)
|
||||
/* This one is quite special. It tries to replace "lda (sp),y" by "lda (sp,x)".
|
||||
/* This one is quite special. It tries to replace "lda (spc),y" by "lda (spc,x)".
|
||||
** The latter is ony cycle slower, but if we're able to remove the necessary
|
||||
** load of the Y register, because X is zero anyway, we gain 1 cycle and
|
||||
** shorten the code by one (transfer) or two bytes (load). So what we do is
|
||||
|
||||
@@ -333,14 +333,14 @@ static int Affected (LoadRegInfo* LRI, const CodeEntry* E)
|
||||
*/
|
||||
if (E->AM == AM65_ABS ||
|
||||
E->AM == AM65_ZP ||
|
||||
(E->AM == AM65_ZP_INDY && strcmp (E->ArgBase, "sp") == 0)
|
||||
(E->AM == AM65_ZP_INDY && strcmp (E->ArgBase, "spc") == 0)
|
||||
) {
|
||||
if ((LRI->Flags & LI_CHECK_ARG) != 0) {
|
||||
if (AE == 0 ||
|
||||
(AE->AM != AM65_ABS &&
|
||||
AE->AM != AM65_ZP &&
|
||||
(AE->AM != AM65_ZP_INDY ||
|
||||
strcmp (AE->ArgBase, "sp") != 0)) ||
|
||||
strcmp (AE->ArgBase, "spc") != 0)) ||
|
||||
(AE->ArgOff == E->ArgOff &&
|
||||
strcmp (AE->ArgBase, E->ArgBase) == 0)) {
|
||||
|
||||
@@ -445,7 +445,7 @@ void PrepairLoadRegInfoForArgCheck (CodeSeg* S, LoadRegInfo* LRI, CodeEntry* E)
|
||||
/* These insns are replaceable only if they are not modified later */
|
||||
LRI->Flags |= LI_CHECK_ARG | LI_CHECK_Y;
|
||||
} else if ((E->AM == AM65_ZP_INDY) &&
|
||||
strcmp (E->Arg, "sp") == 0) {
|
||||
strcmp (E->Arg, "spc") == 0) {
|
||||
/* A load from the stack with known offset is also ok, but in this
|
||||
** case we must reload the index register later. Please note that
|
||||
** a load indirect via other zero page locations is not ok, since
|
||||
@@ -556,7 +556,7 @@ unsigned int TrackLoads (LoadInfo* LI, CodeSeg* S, int I)
|
||||
/* These insns are replaceable only if they are not modified later */
|
||||
LRI->Flags |= LI_CHECK_ARG | LI_CHECK_Y;
|
||||
} else if (E->AM == AM65_ZP_INDY &&
|
||||
strcmp (E->Arg, "sp") == 0) {
|
||||
strcmp (E->Arg, "spc") == 0) {
|
||||
/* A load from the stack with known offset is also ok, but in this
|
||||
** case we must reload the index register later. Please note that
|
||||
** a load indirect via other zero page locations is not ok, since
|
||||
@@ -839,7 +839,7 @@ void AdjustStackOffset (StackOpData* D, unsigned Offs)
|
||||
if (E->OPC != OP65_JSR) {
|
||||
/* Check against some things that should not happen */
|
||||
CHECK (E->AM == AM65_ZP_INDY && E->RI->In.RegY >= (short) Offs);
|
||||
CHECK (strcmp (E->Arg, "sp") == 0);
|
||||
CHECK (strcmp (E->Arg, "spc") == 0);
|
||||
|
||||
/* We need to correct this one */
|
||||
Correction = 2;
|
||||
@@ -1056,8 +1056,8 @@ void AddOpLow (StackOpData* D, opc_t OPC, LoadInfo* LI)
|
||||
InsertEntry (D, X, D->IP++);
|
||||
|
||||
if (LI->A.LoadEntry->OPC == OP65_JSR) {
|
||||
/* opc (sp),y */
|
||||
X = NewCodeEntry (OPC, AM65_ZP_INDY, "sp", 0, D->OpEntry->LI);
|
||||
/* opc (spc),y */
|
||||
X = NewCodeEntry (OPC, AM65_ZP_INDY, "spc", 0, D->OpEntry->LI);
|
||||
} else {
|
||||
/* opc src,y */
|
||||
X = NewCodeEntry (OPC, LI->A.LoadEntry->AM, LI->A.LoadEntry->Arg, 0, D->OpEntry->LI);
|
||||
@@ -1119,8 +1119,8 @@ void AddOpHigh (StackOpData* D, opc_t OPC, LoadInfo* LI, int KeepResult)
|
||||
InsertEntry (D, X, D->IP++);
|
||||
|
||||
if (LI->X.LoadEntry->OPC == OP65_JSR) {
|
||||
/* opc (sp),y */
|
||||
X = NewCodeEntry (OPC, AM65_ZP_INDY, "sp", 0, D->OpEntry->LI);
|
||||
/* opc (spc),y */
|
||||
X = NewCodeEntry (OPC, AM65_ZP_INDY, "spc", 0, D->OpEntry->LI);
|
||||
} else {
|
||||
/* opc src,y */
|
||||
X = NewCodeEntry (OPC, LI->X.LoadEntry->AM, LI->X.LoadEntry->Arg, 0, D->OpEntry->LI);
|
||||
@@ -1310,10 +1310,10 @@ const char* GetZPName (unsigned ZPLoc)
|
||||
return "save+1";
|
||||
}
|
||||
if ((ZPLoc & REG_SP_LO) != 0) {
|
||||
return "sp";
|
||||
return "spc";
|
||||
}
|
||||
if ((ZPLoc & REG_SP_HI) != 0) {
|
||||
return "sp+1";
|
||||
return "spc+1";
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
@@ -62,15 +62,15 @@ unsigned OptAdd1 (CodeSeg* S)
|
||||
** and replace it by:
|
||||
**
|
||||
** ldy #xx-1
|
||||
** lda (sp),y
|
||||
** lda (spc),y
|
||||
** ldy #yy-3
|
||||
** clc
|
||||
** adc (sp),y
|
||||
** adc (spc),y
|
||||
** pha
|
||||
** ldy #xx
|
||||
** lda (sp),y
|
||||
** lda (spc),y
|
||||
** ldy #yy-2
|
||||
** adc (sp),y
|
||||
** adc (spc),y
|
||||
** tax
|
||||
** pla
|
||||
*/
|
||||
@@ -104,8 +104,8 @@ unsigned OptAdd1 (CodeSeg* S)
|
||||
/* Correct the stack of the first Y register load */
|
||||
CE_SetNumArg (L[0], L[0]->Num - 1);
|
||||
|
||||
/* lda (sp),y */
|
||||
X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, "sp", 0, L[1]->LI);
|
||||
/* lda (spc),y */
|
||||
X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, "spc", 0, L[1]->LI);
|
||||
CS_InsertEntry (S, X, I+1);
|
||||
|
||||
/* ldy #yy-3 */
|
||||
@@ -117,8 +117,8 @@ unsigned OptAdd1 (CodeSeg* S)
|
||||
X = NewCodeEntry (OP65_CLC, AM65_IMP, 0, 0, L[5]->LI);
|
||||
CS_InsertEntry (S, X, I+3);
|
||||
|
||||
/* adc (sp),y */
|
||||
X = NewCodeEntry (OP65_ADC, AM65_ZP_INDY, "sp", 0, L[5]->LI);
|
||||
/* adc (spc),y */
|
||||
X = NewCodeEntry (OP65_ADC, AM65_ZP_INDY, "spc", 0, L[5]->LI);
|
||||
CS_InsertEntry (S, X, I+4);
|
||||
|
||||
/* pha */
|
||||
@@ -130,8 +130,8 @@ unsigned OptAdd1 (CodeSeg* S)
|
||||
X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, L[1]->LI);
|
||||
CS_InsertEntry (S, X, I+6);
|
||||
|
||||
/* lda (sp),y */
|
||||
X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, "sp", 0, L[1]->LI);
|
||||
/* lda (spc),y */
|
||||
X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, "spc", 0, L[1]->LI);
|
||||
CS_InsertEntry (S, X, I+7);
|
||||
|
||||
/* ldy #yy-2 */
|
||||
@@ -139,8 +139,8 @@ unsigned OptAdd1 (CodeSeg* S)
|
||||
X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, L[4]->LI);
|
||||
CS_InsertEntry (S, X, I+8);
|
||||
|
||||
/* adc (sp),y */
|
||||
X = NewCodeEntry (OP65_ADC, AM65_ZP_INDY, "sp", 0, L[5]->LI);
|
||||
/* adc (spc),y */
|
||||
X = NewCodeEntry (OP65_ADC, AM65_ZP_INDY, "spc", 0, L[5]->LI);
|
||||
CS_InsertEntry (S, X, I+9);
|
||||
|
||||
/* tax */
|
||||
@@ -181,16 +181,16 @@ unsigned OptAdd2 (CodeSeg* S)
|
||||
** and replace it by:
|
||||
**
|
||||
** ldy #xx-1
|
||||
** lda (sp),y
|
||||
** lda (spc),y
|
||||
** ldy #yy
|
||||
** clc
|
||||
** adc (sp),y
|
||||
** sta (sp),y
|
||||
** adc (spc),y
|
||||
** sta (spc),y
|
||||
** ldy #xx
|
||||
** lda (sp),y
|
||||
** lda (spc),y
|
||||
** ldy #yy+1
|
||||
** adc (sp),y
|
||||
** sta (sp),y
|
||||
** adc (spc),y
|
||||
** sta (spc),y
|
||||
**
|
||||
** provided that a/x is not used later.
|
||||
*/
|
||||
@@ -226,8 +226,8 @@ unsigned OptAdd2 (CodeSeg* S)
|
||||
X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, L[0]->LI);
|
||||
CS_InsertEntry (S, X, I+4);
|
||||
|
||||
/* lda (sp),y */
|
||||
X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, "sp", 0, L[1]->LI);
|
||||
/* lda (spc),y */
|
||||
X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, "spc", 0, L[1]->LI);
|
||||
CS_InsertEntry (S, X, I+5);
|
||||
|
||||
/* ldy #yy */
|
||||
@@ -238,20 +238,20 @@ unsigned OptAdd2 (CodeSeg* S)
|
||||
X = NewCodeEntry (OP65_CLC, AM65_IMP, 0, 0, L[3]->LI);
|
||||
CS_InsertEntry (S, X, I+7);
|
||||
|
||||
/* adc (sp),y */
|
||||
X = NewCodeEntry (OP65_ADC, AM65_ZP_INDY, "sp", 0, L[3]->LI);
|
||||
/* adc (spc),y */
|
||||
X = NewCodeEntry (OP65_ADC, AM65_ZP_INDY, "spc", 0, L[3]->LI);
|
||||
CS_InsertEntry (S, X, I+8);
|
||||
|
||||
/* sta (sp),y */
|
||||
X = NewCodeEntry (OP65_STA, AM65_ZP_INDY, "sp", 0, L[3]->LI);
|
||||
/* sta (spc),y */
|
||||
X = NewCodeEntry (OP65_STA, AM65_ZP_INDY, "spc", 0, L[3]->LI);
|
||||
CS_InsertEntry (S, X, I+9);
|
||||
|
||||
/* ldy #xx */
|
||||
X = NewCodeEntry (OP65_LDY, AM65_IMM, L[0]->Arg, 0, L[0]->LI);
|
||||
CS_InsertEntry (S, X, I+10);
|
||||
|
||||
/* lda (sp),y */
|
||||
X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, "sp", 0, L[1]->LI);
|
||||
/* lda (spc),y */
|
||||
X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, "spc", 0, L[1]->LI);
|
||||
CS_InsertEntry (S, X, I+11);
|
||||
|
||||
/* ldy #yy+1 */
|
||||
@@ -259,12 +259,12 @@ unsigned OptAdd2 (CodeSeg* S)
|
||||
X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, L[2]->LI);
|
||||
CS_InsertEntry (S, X, I+12);
|
||||
|
||||
/* adc (sp),y */
|
||||
X = NewCodeEntry (OP65_ADC, AM65_ZP_INDY, "sp", 0, L[3]->LI);
|
||||
/* adc (spc),y */
|
||||
X = NewCodeEntry (OP65_ADC, AM65_ZP_INDY, "spc", 0, L[3]->LI);
|
||||
CS_InsertEntry (S, X, I+13);
|
||||
|
||||
/* sta (sp),y */
|
||||
X = NewCodeEntry (OP65_STA, AM65_ZP_INDY, "sp", 0, L[3]->LI);
|
||||
/* sta (spc),y */
|
||||
X = NewCodeEntry (OP65_STA, AM65_ZP_INDY, "spc", 0, L[3]->LI);
|
||||
CS_InsertEntry (S, X, I+14);
|
||||
|
||||
/* Delete the old code */
|
||||
|
||||
@@ -55,14 +55,14 @@ unsigned OptAdd1 (CodeSeg* S);
|
||||
** jsr pushax
|
||||
** ldy xxx
|
||||
** ldx #$00
|
||||
** lda (sp),y
|
||||
** lda (spc),y
|
||||
** jsr tosaddax
|
||||
**
|
||||
** and replace it by:
|
||||
**
|
||||
** ldy xxx-2
|
||||
** clc
|
||||
** adc (sp),y
|
||||
** adc (spc),y
|
||||
** bcc L
|
||||
** inx
|
||||
** L:
|
||||
@@ -72,26 +72,26 @@ unsigned OptAdd2 (CodeSeg* S);
|
||||
/* Search for the sequence
|
||||
**
|
||||
** ldy #xx
|
||||
** lda (sp),y
|
||||
** lda (spc),y
|
||||
** tax
|
||||
** dey
|
||||
** lda (sp),y
|
||||
** lda (spc),y
|
||||
** ldy #$yy
|
||||
** jsr addeqysp
|
||||
**
|
||||
** and replace it by:
|
||||
**
|
||||
** ldy #xx-1
|
||||
** lda (sp),y
|
||||
** lda (spc),y
|
||||
** ldy #yy
|
||||
** clc
|
||||
** adc (sp),y
|
||||
** sta (sp),y
|
||||
** adc (spc),y
|
||||
** sta (spc),y
|
||||
** ldy #xx
|
||||
** lda (sp),y
|
||||
** lda (spc),y
|
||||
** ldy #yy+1
|
||||
** adc (sp),y
|
||||
** sta (sp),y
|
||||
** adc (spc),y
|
||||
** sta (spc),y
|
||||
**
|
||||
** provided that a/x is not used later.
|
||||
*/
|
||||
|
||||
@@ -743,9 +743,9 @@ unsigned OptBNegAX2 (CodeSeg* S)
|
||||
** and replace it by
|
||||
**
|
||||
** ldy #xx
|
||||
** lda (sp),y
|
||||
** lda (spc),y
|
||||
** dey
|
||||
** ora (sp),y
|
||||
** ora (spc),y
|
||||
** jeq/jne ...
|
||||
*/
|
||||
{
|
||||
@@ -772,16 +772,16 @@ unsigned OptBNegAX2 (CodeSeg* S)
|
||||
|
||||
CodeEntry* X;
|
||||
|
||||
/* lda (sp),y */
|
||||
X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, "sp", 0, L[1]->LI);
|
||||
/* lda (spc),y */
|
||||
X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, "spc", 0, L[1]->LI);
|
||||
CS_InsertEntry (S, X, I+1);
|
||||
|
||||
/* dey */
|
||||
X = NewCodeEntry (OP65_DEY, AM65_IMP, 0, 0, L[1]->LI);
|
||||
CS_InsertEntry (S, X, I+2);
|
||||
|
||||
/* ora (sp),y */
|
||||
X = NewCodeEntry (OP65_ORA, AM65_ZP_INDY, "sp", 0, L[1]->LI);
|
||||
/* ora (spc),y */
|
||||
X = NewCodeEntry (OP65_ORA, AM65_ZP_INDY, "spc", 0, L[1]->LI);
|
||||
CS_InsertEntry (S, X, I+3);
|
||||
|
||||
/* Invert the branch */
|
||||
|
||||
@@ -431,22 +431,22 @@ unsigned OptCmp5 (CodeSeg* S)
|
||||
|
||||
/* The value is zero, we may use the simple code version:
|
||||
** ldy #o-1
|
||||
** lda (sp),y
|
||||
** lda (spc),y
|
||||
** ldy #o
|
||||
** ora (sp),y
|
||||
** ora (spc),y
|
||||
** jne/jeq ...
|
||||
*/
|
||||
sprintf (Buf, "$%02X", (int)(L[0]->Num-1));
|
||||
X = NewCodeEntry (OP65_LDY, AM65_IMM, Buf, 0, L[0]->LI);
|
||||
CS_InsertEntry (S, X, I+1);
|
||||
|
||||
X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, "sp", 0, L[1]->LI);
|
||||
X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, "spc", 0, L[1]->LI);
|
||||
CS_InsertEntry (S, X, I+2);
|
||||
|
||||
X = NewCodeEntry (OP65_LDY, AM65_IMM, L[0]->Arg, 0, L[0]->LI);
|
||||
CS_InsertEntry (S, X, I+3);
|
||||
|
||||
X = NewCodeEntry (OP65_ORA, AM65_ZP_INDY, "sp", 0, L[1]->LI);
|
||||
X = NewCodeEntry (OP65_ORA, AM65_ZP_INDY, "spc", 0, L[1]->LI);
|
||||
CS_InsertEntry (S, X, I+4);
|
||||
|
||||
CS_DelEntries (S, I+5, 3); /* cpx/bne/cmp */
|
||||
@@ -461,18 +461,18 @@ unsigned OptCmp5 (CodeSeg* S)
|
||||
** of the low byte after the first branch if possible:
|
||||
**
|
||||
** ldy #o
|
||||
** lda (sp),y
|
||||
** lda (spc),y
|
||||
** cmp #a
|
||||
** bne L1
|
||||
** ldy #o-1
|
||||
** lda (sp),y
|
||||
** lda (spc),y
|
||||
** cmp #b
|
||||
** jne/jeq ...
|
||||
*/
|
||||
X = NewCodeEntry (OP65_LDY, AM65_IMM, L[0]->Arg, 0, L[0]->LI);
|
||||
CS_InsertEntry (S, X, I+3);
|
||||
|
||||
X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, "sp", 0, L[1]->LI);
|
||||
X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, "spc", 0, L[1]->LI);
|
||||
CS_InsertEntry (S, X, I+4);
|
||||
|
||||
X = NewCodeEntry (OP65_CMP, L[2]->AM, L[2]->Arg, 0, L[2]->LI);
|
||||
@@ -482,7 +482,7 @@ unsigned OptCmp5 (CodeSeg* S)
|
||||
X = NewCodeEntry (OP65_LDY, AM65_IMM, Buf, 0, L[0]->LI);
|
||||
CS_InsertEntry (S, X, I+7);
|
||||
|
||||
X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, "sp", 0, L[1]->LI);
|
||||
X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, "spc", 0, L[1]->LI);
|
||||
CS_InsertEntry (S, X, I+8);
|
||||
|
||||
CS_DelEntries (S, I, 3); /* ldy/jsr/cpx */
|
||||
|
||||
@@ -113,10 +113,10 @@ unsigned OptCmp5 (CodeSeg* S);
|
||||
/* Optimize compares of local variables:
|
||||
**
|
||||
** ldy #o
|
||||
** lda (sp),y
|
||||
** lda (spc),y
|
||||
** tax
|
||||
** dey
|
||||
** lda (sp),y
|
||||
** lda (spc),y
|
||||
** cpx #a
|
||||
** bne L1
|
||||
** cmp #b
|
||||
|
||||
@@ -492,9 +492,9 @@ unsigned OptGotoSPAdj (CodeSeg* S)
|
||||
L[1]->AM == AM65_ABS &&
|
||||
L[2]->OPC == OP65_CLC &&
|
||||
L[3]->OPC == OP65_ADC &&
|
||||
strcmp (L[3]->Arg, "sp") == 0 &&
|
||||
strcmp (L[3]->Arg, "spc") == 0 &&
|
||||
L[6]->OPC == OP65_ADC &&
|
||||
strcmp (L[6]->Arg, "sp+1") == 0 &&
|
||||
strcmp (L[6]->Arg, "spc+1") == 0 &&
|
||||
L[9]->OPC == OP65_JMP) {
|
||||
adjustment = FindSPAdjustment (L[1]->Arg);
|
||||
|
||||
@@ -617,7 +617,7 @@ unsigned OptLoad1 (CodeSeg* S)
|
||||
CS_InsertEntry (S, X, I+1);
|
||||
|
||||
/* Load from stack */
|
||||
X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, "sp", 0, E->LI);
|
||||
X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, "spc", 0, E->LI);
|
||||
CS_InsertEntry (S, X, I+2);
|
||||
|
||||
/* Now remove the call to the subroutine */
|
||||
@@ -673,8 +673,8 @@ unsigned OptLoad2 (CodeSeg* S)
|
||||
** later
|
||||
*/
|
||||
|
||||
/* lda (sp),y */
|
||||
X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, "sp", 0, L[0]->LI);
|
||||
/* lda (spc),y */
|
||||
X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, "spc", 0, L[0]->LI);
|
||||
CS_InsertEntry (S, X, I+3);
|
||||
|
||||
/* sta abs */
|
||||
@@ -685,8 +685,8 @@ unsigned OptLoad2 (CodeSeg* S)
|
||||
X = NewCodeEntry (OP65_DEY, AM65_IMP, 0, 0, L[0]->LI);
|
||||
CS_InsertEntry (S, X, I+5);
|
||||
|
||||
/* lda (sp),y */
|
||||
X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, "sp", 0, L[0]->LI);
|
||||
/* lda (spc),y */
|
||||
X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, "spc", 0, L[0]->LI);
|
||||
CS_InsertEntry (S, X, I+6);
|
||||
|
||||
/* sta abs */
|
||||
@@ -700,8 +700,8 @@ unsigned OptLoad2 (CodeSeg* S)
|
||||
|
||||
/* Standard replacement */
|
||||
|
||||
/* lda (sp),y */
|
||||
X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, "sp", 0, L[0]->LI);
|
||||
/* lda (spc),y */
|
||||
X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, "spc", 0, L[0]->LI);
|
||||
CS_InsertEntry (S, X, I+1);
|
||||
|
||||
/* tax */
|
||||
@@ -712,8 +712,8 @@ unsigned OptLoad2 (CodeSeg* S)
|
||||
X = NewCodeEntry (OP65_DEY, AM65_IMP, 0, 0, L[0]->LI);
|
||||
CS_InsertEntry (S, X, I+3);
|
||||
|
||||
/* lda (sp),y */
|
||||
X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, "sp", 0, L[0]->LI);
|
||||
/* lda (spc),y */
|
||||
X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, "spc", 0, L[0]->LI);
|
||||
CS_InsertEntry (S, X, I+4);
|
||||
|
||||
/* Now remove the call to the subroutine */
|
||||
|
||||
@@ -359,7 +359,7 @@ unsigned OptPtrLoad4 (CodeSeg* S)
|
||||
** ldx #>(label+0)
|
||||
** ldy #$xx
|
||||
** clc
|
||||
** adc (sp),y
|
||||
** adc (spc),y
|
||||
** bcc L
|
||||
** inx
|
||||
** L: ldy #$00
|
||||
@@ -368,7 +368,7 @@ unsigned OptPtrLoad4 (CodeSeg* S)
|
||||
** and replace it by:
|
||||
**
|
||||
** ldy #$xx
|
||||
** lda (sp),y
|
||||
** lda (spc),y
|
||||
** tay
|
||||
** ldx #$00
|
||||
** lda label,y
|
||||
@@ -553,7 +553,7 @@ unsigned OptPtrLoad6 (CodeSeg* S)
|
||||
** jsr pushax
|
||||
** ldy #xxx
|
||||
** ldx #$00
|
||||
** lda (sp),y
|
||||
** lda (spc),y
|
||||
** jsr tosaddax
|
||||
** ldy #$00
|
||||
** jsr ldauidx
|
||||
@@ -563,7 +563,7 @@ unsigned OptPtrLoad6 (CodeSeg* S)
|
||||
** sta ptr1
|
||||
** stx ptr1+1
|
||||
** ldy #xxx-2
|
||||
** lda (sp),y
|
||||
** lda (spc),y
|
||||
** tay
|
||||
** ldx #$00
|
||||
** lda (ptr1),y
|
||||
@@ -613,7 +613,7 @@ unsigned OptPtrLoad6 (CodeSeg* S)
|
||||
X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, L[1]->LI);
|
||||
CS_InsertEntry (S, X, I+9);
|
||||
|
||||
/* lda (sp),y */
|
||||
/* lda (spc),y */
|
||||
X = NewCodeEntry (OP65_LDA, L[3]->AM, L[3]->Arg, 0, L[3]->LI);
|
||||
CS_InsertEntry (S, X, I+10);
|
||||
|
||||
|
||||
@@ -127,7 +127,7 @@ unsigned OptPtrLoad4 (CodeSeg* S);
|
||||
** ldx #>(label+0)
|
||||
** ldy #$xx
|
||||
** clc
|
||||
** adc (sp),y
|
||||
** adc (spc),y
|
||||
** bcc L
|
||||
** inx
|
||||
** L: ldy #$00
|
||||
@@ -136,7 +136,7 @@ unsigned OptPtrLoad4 (CodeSeg* S);
|
||||
** and replace it by:
|
||||
**
|
||||
** ldy #$xx
|
||||
** lda (sp),y
|
||||
** lda (spc),y
|
||||
** tay
|
||||
** ldx #$00
|
||||
** lda label,y
|
||||
@@ -166,7 +166,7 @@ unsigned OptPtrLoad6 (CodeSeg* S);
|
||||
** jsr pushax
|
||||
** ldy xxx
|
||||
** ldx #$00
|
||||
** lda (sp),y
|
||||
** lda (spc),y
|
||||
** jsr tosaddax
|
||||
** ldy #$00
|
||||
** jsr ldauidx
|
||||
@@ -176,7 +176,7 @@ unsigned OptPtrLoad6 (CodeSeg* S);
|
||||
** sta ptr1
|
||||
** stx ptr1+1
|
||||
** ldy xxx
|
||||
** lda (sp),y
|
||||
** lda (spc),y
|
||||
** tay
|
||||
** lda (ptr1),y
|
||||
*/
|
||||
|
||||
@@ -396,7 +396,7 @@ unsigned OptPtrStore2 (CodeSeg* S)
|
||||
** L: jsr pushax
|
||||
** ldy yyy
|
||||
** ldx #$00
|
||||
** lda (sp),y
|
||||
** lda (spc),y
|
||||
** ldy #$00
|
||||
** jsr staspidx
|
||||
**
|
||||
@@ -406,7 +406,7 @@ unsigned OptPtrStore2 (CodeSeg* S)
|
||||
** stx ptr1+1
|
||||
** ldy yyy-2
|
||||
** ldx #$00
|
||||
** lda (sp),y
|
||||
** lda (spc),y
|
||||
** ldy xxx
|
||||
** sta (ptr1),y
|
||||
**
|
||||
@@ -414,7 +414,7 @@ unsigned OptPtrStore2 (CodeSeg* S)
|
||||
**
|
||||
** ldy yyy-2
|
||||
** ldx #$00
|
||||
** lda (sp),y
|
||||
** lda (spc),y
|
||||
** ldy xxx
|
||||
** sta (zp),y
|
||||
**
|
||||
@@ -422,7 +422,7 @@ unsigned OptPtrStore2 (CodeSeg* S)
|
||||
**
|
||||
** ldy yyy-2
|
||||
** ldx #$00
|
||||
** lda (sp),y
|
||||
** lda (spc),y
|
||||
** ldy xxx
|
||||
** sta label,y
|
||||
**
|
||||
@@ -430,7 +430,7 @@ unsigned OptPtrStore2 (CodeSeg* S)
|
||||
**
|
||||
** ldy yyy-2
|
||||
** ldx #$00
|
||||
** lda (sp),y
|
||||
** lda (spc),y
|
||||
** ldy xxx
|
||||
** sta $xxxx,y
|
||||
**
|
||||
@@ -468,7 +468,7 @@ unsigned OptPtrStore2 (CodeSeg* S)
|
||||
L[6]->OPC == OP65_LDX &&
|
||||
L[7]->OPC == OP65_LDA &&
|
||||
L[7]->AM == AM65_ZP_INDY &&
|
||||
strcmp (L[7]->Arg, "sp") == 0 &&
|
||||
strcmp (L[7]->Arg, "spc") == 0 &&
|
||||
L[8]->OPC == OP65_LDY &&
|
||||
(L[8]->AM == AM65_ABS ||
|
||||
L[8]->AM == AM65_ZP ||
|
||||
|
||||
@@ -105,7 +105,7 @@ unsigned OptPtrStore2 (CodeSeg* S);
|
||||
** L: jsr pushax
|
||||
** ldy yyy
|
||||
** ldx #$00
|
||||
** lda (sp),y
|
||||
** lda (spc),y
|
||||
** ldy #$00
|
||||
** jsr staspidx
|
||||
**
|
||||
@@ -115,7 +115,7 @@ unsigned OptPtrStore2 (CodeSeg* S);
|
||||
** stx ptr1+1
|
||||
** ldy yyy-2
|
||||
** ldx #$00
|
||||
** lda (sp),y
|
||||
** lda (spc),y
|
||||
** ldy xxx
|
||||
** sta (ptr1),y
|
||||
**
|
||||
@@ -123,7 +123,7 @@ unsigned OptPtrStore2 (CodeSeg* S);
|
||||
**
|
||||
** ldy yyy-2
|
||||
** ldx #$00
|
||||
** lda (sp),y
|
||||
** lda (spc),y
|
||||
** ldy xxx
|
||||
** sta (zp),y
|
||||
**
|
||||
@@ -131,7 +131,7 @@ unsigned OptPtrStore2 (CodeSeg* S);
|
||||
**
|
||||
** ldy yyy-2
|
||||
** ldx #$00
|
||||
** lda (sp),y
|
||||
** lda (spc),y
|
||||
** ldy xxx
|
||||
** sta label,y
|
||||
**
|
||||
@@ -139,7 +139,7 @@ unsigned OptPtrStore2 (CodeSeg* S);
|
||||
**
|
||||
** ldy yyy-2
|
||||
** ldx #$00
|
||||
** lda (sp),y
|
||||
** lda (spc),y
|
||||
** ldy xxx
|
||||
** sta $xxxx,y
|
||||
**
|
||||
|
||||
@@ -1292,10 +1292,10 @@ static unsigned Opt_a_tosicmp (StackOpData* D)
|
||||
}
|
||||
InsertEntry (D, X, D->IP++);
|
||||
|
||||
/* cmp src,y OR cmp (sp),y */
|
||||
/* cmp src,y OR cmp (spc),y */
|
||||
if (D->Rhs.A.LoadEntry->OPC == OP65_JSR) {
|
||||
/* opc (sp),y */
|
||||
X = NewCodeEntry (OP65_CMP, AM65_ZP_INDY, "sp", 0, D->OpEntry->LI);
|
||||
/* opc (spc),y */
|
||||
X = NewCodeEntry (OP65_CMP, AM65_ZP_INDY, "spc", 0, D->OpEntry->LI);
|
||||
} else {
|
||||
/* opc src,y */
|
||||
X = NewCodeEntry (OP65_CMP, D->Rhs.A.LoadEntry->AM, D->Rhs.A.LoadEntry->Arg, 0, D->OpEntry->LI);
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
|
||||
static void InsertStore (CodeSeg* S, unsigned* IP, LineInfo* LI)
|
||||
{
|
||||
CodeEntry* X = NewCodeEntry (OP65_STA, AM65_ZP_INDY, "sp", 0, LI);
|
||||
CodeEntry* X = NewCodeEntry (OP65_STA, AM65_ZP_INDY, "spc", 0, LI);
|
||||
CS_InsertEntry (S, X, (*IP)++);
|
||||
}
|
||||
|
||||
|
||||
@@ -269,7 +269,7 @@ static void ParseAutoDecl (Declarator* Decl)
|
||||
Sym->V.Offs = F_ReserveLocalSpace (CurrentFunc, Size);
|
||||
|
||||
/* Next, allocate the space on the stack. This means that the
|
||||
** variable is now located at offset 0 from the current sp.
|
||||
** variable is now located at offset 0 from the current spc.
|
||||
*/
|
||||
F_AllocLocalSpace (CurrentFunc);
|
||||
|
||||
|
||||
@@ -370,7 +370,7 @@ static void StdFunc_memcpy (FuncDesc* F attribute ((unused)), ExprDesc* Expr)
|
||||
AddCodeLine ("ldy #$%02X", (unsigned char) (Offs + Arg3.Expr.IVal - 1));
|
||||
g_defcodelabel (Label);
|
||||
AddCodeLine ("lda %s,y", ED_GetLabelName (&Arg2.Expr, -Offs));
|
||||
AddCodeLine ("sta (sp),y");
|
||||
AddCodeLine ("sta (spc),y");
|
||||
AddCodeLine ("dey");
|
||||
AddCodeLine ("bpl %s", LocalLabelName (Label));
|
||||
} else {
|
||||
@@ -378,7 +378,7 @@ static void StdFunc_memcpy (FuncDesc* F attribute ((unused)), ExprDesc* Expr)
|
||||
AddCodeLine ("ldy #$%02X", (unsigned char) (Offs + Arg3.Expr.IVal - 1));
|
||||
g_defcodelabel (Label);
|
||||
AddCodeLine ("lda %s,x", ED_GetLabelName (&Arg2.Expr, 0));
|
||||
AddCodeLine ("sta (sp),y");
|
||||
AddCodeLine ("sta (spc),y");
|
||||
AddCodeLine ("dey");
|
||||
AddCodeLine ("dex");
|
||||
AddCodeLine ("bpl %s", LocalLabelName (Label));
|
||||
@@ -390,7 +390,7 @@ static void StdFunc_memcpy (FuncDesc* F attribute ((unused)), ExprDesc* Expr)
|
||||
AddCodeLine ("ldy #$%02X", (unsigned char) Offs);
|
||||
g_defcodelabel (Label);
|
||||
AddCodeLine ("lda %s,y", ED_GetLabelName (&Arg2.Expr, -Offs));
|
||||
AddCodeLine ("sta (sp),y");
|
||||
AddCodeLine ("sta (spc),y");
|
||||
AddCodeLine ("iny");
|
||||
AddCmpCodeIfSizeNot256 ("cpy #$%02X", Offs + Arg3.Expr.IVal);
|
||||
AddCodeLine ("bne %s", LocalLabelName (Label));
|
||||
@@ -399,7 +399,7 @@ static void StdFunc_memcpy (FuncDesc* F attribute ((unused)), ExprDesc* Expr)
|
||||
AddCodeLine ("ldy #$%02X", (unsigned char) Offs);
|
||||
g_defcodelabel (Label);
|
||||
AddCodeLine ("lda %s,x", ED_GetLabelName (&Arg2.Expr, 0));
|
||||
AddCodeLine ("sta (sp),y");
|
||||
AddCodeLine ("sta (spc),y");
|
||||
AddCodeLine ("iny");
|
||||
AddCodeLine ("inx");
|
||||
AddCmpCodeIfSizeNot256 ("cpx #$%02X", Arg3.Expr.IVal);
|
||||
@@ -447,7 +447,7 @@ static void StdFunc_memcpy (FuncDesc* F attribute ((unused)), ExprDesc* Expr)
|
||||
if (Offs == 0) {
|
||||
AddCodeLine ("ldy #$%02X", (unsigned char) (Arg3.Expr.IVal - 1));
|
||||
g_defcodelabel (Label);
|
||||
AddCodeLine ("lda (sp),y");
|
||||
AddCodeLine ("lda (spc),y");
|
||||
AddCodeLine ("sta %s,y", ED_GetLabelName (&Arg1.Expr, 0));
|
||||
AddCodeLine ("dey");
|
||||
AddCodeLine ("bpl %s", LocalLabelName (Label));
|
||||
@@ -455,7 +455,7 @@ static void StdFunc_memcpy (FuncDesc* F attribute ((unused)), ExprDesc* Expr)
|
||||
AddCodeLine ("ldx #$%02X", (unsigned char) (Arg3.Expr.IVal-1));
|
||||
AddCodeLine ("ldy #$%02X", (unsigned char) (Offs + Arg3.Expr.IVal - 1));
|
||||
g_defcodelabel (Label);
|
||||
AddCodeLine ("lda (sp),y");
|
||||
AddCodeLine ("lda (spc),y");
|
||||
AddCodeLine ("sta %s,x", ED_GetLabelName (&Arg1.Expr, 0));
|
||||
AddCodeLine ("dey");
|
||||
AddCodeLine ("dex");
|
||||
@@ -467,7 +467,7 @@ static void StdFunc_memcpy (FuncDesc* F attribute ((unused)), ExprDesc* Expr)
|
||||
if (Offs == 0 || AllowOneIndex) {
|
||||
AddCodeLine ("ldy #$%02X", (unsigned char) Offs);
|
||||
g_defcodelabel (Label);
|
||||
AddCodeLine ("lda (sp),y");
|
||||
AddCodeLine ("lda (spc),y");
|
||||
AddCodeLine ("sta %s,y", ED_GetLabelName (&Arg1.Expr, -Offs));
|
||||
AddCodeLine ("iny");
|
||||
AddCmpCodeIfSizeNot256 ("cpy #$%02X", Offs + Arg3.Expr.IVal);
|
||||
@@ -476,7 +476,7 @@ static void StdFunc_memcpy (FuncDesc* F attribute ((unused)), ExprDesc* Expr)
|
||||
AddCodeLine ("ldx #$00");
|
||||
AddCodeLine ("ldy #$%02X", (unsigned char) Offs);
|
||||
g_defcodelabel (Label);
|
||||
AddCodeLine ("lda (sp),y");
|
||||
AddCodeLine ("lda (spc),y");
|
||||
AddCodeLine ("sta %s,x", ED_GetLabelName (&Arg1.Expr, 0));
|
||||
AddCodeLine ("iny");
|
||||
AddCodeLine ("inx");
|
||||
@@ -511,14 +511,14 @@ static void StdFunc_memcpy (FuncDesc* F attribute ((unused)), ExprDesc* Expr)
|
||||
if (Arg3.Expr.IVal <= 129) {
|
||||
AddCodeLine ("ldy #$%02X", (unsigned char) (Arg3.Expr.IVal - 1));
|
||||
g_defcodelabel (Label);
|
||||
AddCodeLine ("lda (sp),y");
|
||||
AddCodeLine ("lda (spc),y");
|
||||
AddCodeLine ("sta (ptr1),y");
|
||||
AddCodeLine ("dey");
|
||||
AddCodeLine ("bpl %s", LocalLabelName (Label));
|
||||
} else {
|
||||
AddCodeLine ("ldy #$00");
|
||||
g_defcodelabel (Label);
|
||||
AddCodeLine ("lda (sp),y");
|
||||
AddCodeLine ("lda (spc),y");
|
||||
AddCodeLine ("sta (ptr1),y");
|
||||
AddCodeLine ("iny");
|
||||
AddCmpCodeIfSizeNot256 ("cpy #$%02X", Arg3.Expr.IVal);
|
||||
@@ -702,7 +702,7 @@ static void StdFunc_memset (FuncDesc* F attribute ((unused)), ExprDesc* Expr)
|
||||
AddCodeLine ("ldy #$%02X", (unsigned char) Offs);
|
||||
AddCodeLine ("lda #$%02X", (unsigned char) Arg2.Expr.IVal);
|
||||
g_defcodelabel (Label);
|
||||
AddCodeLine ("sta (sp),y");
|
||||
AddCodeLine ("sta (spc),y");
|
||||
AddCodeLine ("iny");
|
||||
AddCmpCodeIfSizeNot256 ("cpy #$%02X", Offs + Arg3.Expr.IVal);
|
||||
AddCodeLine ("bne %s", LocalLabelName (Label));
|
||||
@@ -856,7 +856,7 @@ static void StdFunc_strcmp (FuncDesc* F attribute ((unused)), ExprDesc* Expr)
|
||||
/* Generate code */
|
||||
AddCodeLine ("ldy #$%02X", Offs);
|
||||
AddCodeLine ("ldx #$00");
|
||||
AddCodeLine ("lda (sp),y");
|
||||
AddCodeLine ("lda (spc),y");
|
||||
} else if (IsArray && ED_IsLocConst (&Arg1.Expr)) {
|
||||
/* Drop the generated code */
|
||||
RemoveCode (&Arg1.Load);
|
||||
@@ -1089,14 +1089,14 @@ static void StdFunc_strcpy (FuncDesc* F attribute ((unused)), ExprDesc* Expr)
|
||||
if (Offs == 0 || AllowOneIndex) {
|
||||
g_defcodelabel (L1);
|
||||
AddCodeLine ("iny");
|
||||
AddCodeLine ("lda (sp),y");
|
||||
AddCodeLine ("lda (spc),y");
|
||||
AddCodeLine ("sta %s,y", ED_GetLabelName (&Arg1.Expr, -Offs));
|
||||
} else {
|
||||
AddCodeLine ("ldx #$FF");
|
||||
g_defcodelabel (L1);
|
||||
AddCodeLine ("iny");
|
||||
AddCodeLine ("inx");
|
||||
AddCodeLine ("lda (sp),y");
|
||||
AddCodeLine ("lda (spc),y");
|
||||
AddCodeLine ("sta %s,x", ED_GetLabelName (&Arg1.Expr, 0));
|
||||
}
|
||||
AddCodeLine ("bne %s", LocalLabelName (L1));
|
||||
@@ -1137,14 +1137,14 @@ static void StdFunc_strcpy (FuncDesc* F attribute ((unused)), ExprDesc* Expr)
|
||||
g_defcodelabel (L1);
|
||||
AddCodeLine ("iny");
|
||||
AddCodeLine ("lda %s,y", ED_GetLabelName (&Arg2.Expr, -Offs));
|
||||
AddCodeLine ("sta (sp),y");
|
||||
AddCodeLine ("sta (spc),y");
|
||||
} else {
|
||||
AddCodeLine ("ldx #$FF");
|
||||
g_defcodelabel (L1);
|
||||
AddCodeLine ("iny");
|
||||
AddCodeLine ("inx");
|
||||
AddCodeLine ("lda %s,x", ED_GetLabelName (&Arg2.Expr, 0));
|
||||
AddCodeLine ("sta (sp),y");
|
||||
AddCodeLine ("sta (spc),y");
|
||||
}
|
||||
AddCodeLine ("bne %s", LocalLabelName (L1));
|
||||
|
||||
@@ -1284,7 +1284,7 @@ static void StdFunc_strlen (FuncDesc* F attribute ((unused)), ExprDesc* Expr)
|
||||
g_defcodelabel (L);
|
||||
AddCodeLine ("inx");
|
||||
AddCodeLine ("iny");
|
||||
AddCodeLine ("lda (sp),y");
|
||||
AddCodeLine ("lda (spc),y");
|
||||
AddCodeLine ("bne %s", LocalLabelName (L));
|
||||
AddCodeLine ("txa");
|
||||
AddCodeLine ("ldx #$00");
|
||||
|
||||
@@ -458,7 +458,7 @@ static unsigned FindIdType (const char* TypeName)
|
||||
{ "segment", SegmentId },
|
||||
{ "source", SourceId },
|
||||
{ "src", SourceId },
|
||||
{ "sp", SpanId },
|
||||
{ "spc", SpanId },
|
||||
{ "span", SpanId },
|
||||
{ "sym", SymbolId },
|
||||
{ "symbol", SymbolId },
|
||||
|
||||
@@ -230,7 +230,7 @@ static unsigned char ReadProgramFile (void)
|
||||
}
|
||||
}
|
||||
|
||||
/* Get the address of sp from the file header */
|
||||
/* Get the address of spc from the file header */
|
||||
if ((Val = fgetc(F)) != EOF) {
|
||||
SPAddr = Val;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user