Fix bad code generation due to not correctly flushing the stack before
comparisons.
This commit is contained in:
parent
a2b5202081
commit
f4b45f1ed7
|
@ -2048,14 +2048,15 @@ gen xra a
|
|||
|
||||
#ifdef USE_I80_RSTS
|
||||
pat lol zeq sfit($1, 8)
|
||||
uses hlreg, areg
|
||||
gen
|
||||
rst {const1, 3}
|
||||
data1 {const1, $1}
|
||||
mov a, {m}
|
||||
inx hl
|
||||
ora {m}
|
||||
jz {label, $2}
|
||||
with STACK
|
||||
uses hlreg, areg
|
||||
gen
|
||||
rst {const1, 3}
|
||||
data1 {const1, $1}
|
||||
mov a, {m}
|
||||
inx hl
|
||||
ora {m}
|
||||
jz {label, $2}
|
||||
#endif
|
||||
|
||||
pat lol zeq
|
||||
|
@ -2070,25 +2071,26 @@ pat lol zeq
|
|||
|
||||
#ifdef USE_I80_RSTS
|
||||
pat lol zne sfit($1, 8)
|
||||
uses hlreg, areg
|
||||
gen
|
||||
rst {const1, 3}
|
||||
data1 {const1, $1}
|
||||
mov a, {m}
|
||||
inx hl
|
||||
ora {m}
|
||||
jnz {label, $2}
|
||||
with STACK
|
||||
uses hlreg, areg
|
||||
gen
|
||||
rst {const1, 3}
|
||||
data1 {const1, $1}
|
||||
mov a, {m}
|
||||
inx hl
|
||||
ora {m}
|
||||
jnz {label, $2}
|
||||
#endif
|
||||
|
||||
pat lol zne
|
||||
with STACK
|
||||
uses hlreg={const2,$1}, areg
|
||||
gen
|
||||
dad lb
|
||||
mov a,{m}
|
||||
inx hl
|
||||
ora {m}
|
||||
jnz {label,$2}
|
||||
uses hlreg={const2,$1}, areg
|
||||
gen
|
||||
dad lb
|
||||
mov a,{m}
|
||||
inx hl
|
||||
ora {m}
|
||||
jnz {label,$2}
|
||||
|
||||
pat ior zeq $1==2
|
||||
with hl_or_de hl_or_de STACK
|
||||
|
|
|
@ -56,7 +56,7 @@ void demo2(int lval, va_list ap)
|
|||
ASSERT(strcmp(ptmp, "35") == 0);
|
||||
}
|
||||
|
||||
void doit1(char *x, ...)
|
||||
void doit1a(char *x, ...)
|
||||
{
|
||||
va_list ptr;
|
||||
va_start(ptr, x);
|
||||
|
@ -64,7 +64,15 @@ void doit1(char *x, ...)
|
|||
va_end(ptr);
|
||||
}
|
||||
|
||||
void doit2(char *x, ...)
|
||||
void doit1b(char *x, ...)
|
||||
{
|
||||
va_list ptr;
|
||||
va_start(ptr, x);
|
||||
demo(1,ptr);
|
||||
va_end(ptr);
|
||||
}
|
||||
|
||||
void doit2a(char *x, ...)
|
||||
{
|
||||
va_list ptr;
|
||||
va_start(ptr, x);
|
||||
|
@ -72,10 +80,20 @@ void doit2(char *x, ...)
|
|||
va_end(ptr);
|
||||
}
|
||||
|
||||
void doit2b(char *x, ...)
|
||||
{
|
||||
va_list ptr;
|
||||
va_start(ptr, x);
|
||||
demo2(1,ptr);
|
||||
va_end(ptr);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
doit1("", 35);
|
||||
doit2("", 35);
|
||||
doit1a("", 35);
|
||||
doit1b("", 35L);
|
||||
doit2a("", 35);
|
||||
doit2b("", 35L);
|
||||
finished();
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue