mirror of
https://github.com/cc65/cc65.git
synced 2025-01-10 19:29:45 +00:00
case that #1231 improved.
This commit is contained in:
parent
e0ae8ddc68
commit
e6b9a4b292
122
test/val/bug1652-optimizer.c
Normal file
122
test/val/bug1652-optimizer.c
Normal file
@ -0,0 +1,122 @@
|
||||
|
||||
/* #1652 - Regression in code optimization */
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
/* better before pr#1231
|
||||
|
||||
before:
|
||||
|
||||
jsr pusha
|
||||
ldy #$01
|
||||
ldx #$00
|
||||
lda (sp),y
|
||||
beq L0005
|
||||
lda (sp,x)
|
||||
beq L0005
|
||||
txa
|
||||
jmp incsp2 ; <--
|
||||
L0005: tya
|
||||
jmp incsp2
|
||||
|
||||
after:
|
||||
|
||||
jsr pusha
|
||||
ldy #$01
|
||||
ldx #$00
|
||||
lda (sp),y
|
||||
beq L0004
|
||||
lda (sp,x)
|
||||
beq L0004
|
||||
txa
|
||||
jmp L0001 ; <--
|
||||
L0004: tya
|
||||
L0001: jmp incsp2
|
||||
|
||||
*/
|
||||
|
||||
int foo(unsigned char bar, unsigned char baz)
|
||||
{
|
||||
return (bar == 0 || baz == 0);
|
||||
}
|
||||
|
||||
/* worse before pr#1231
|
||||
|
||||
before:
|
||||
;
|
||||
; y = 1;
|
||||
;
|
||||
lda #$01
|
||||
sta _y
|
||||
;
|
||||
; (*tablePtr)[y][x] = 83;
|
||||
;
|
||||
ldx #$00
|
||||
lda _y
|
||||
jsr aslax2
|
||||
clc
|
||||
adc _tablePtr
|
||||
pha
|
||||
txa
|
||||
adc _tablePtr+1
|
||||
tax
|
||||
pla
|
||||
clc
|
||||
adc _x
|
||||
bcc L0019
|
||||
inx
|
||||
L0019:
|
||||
sta ptr1
|
||||
stx ptr1+1
|
||||
lda #$53
|
||||
ldy #$00
|
||||
sta (ptr1),y
|
||||
|
||||
after:
|
||||
|
||||
;
|
||||
; y = 1;
|
||||
;
|
||||
lda #$01
|
||||
sta _y
|
||||
;
|
||||
; (*tablePtr)[y][x] = 83;
|
||||
;
|
||||
ldx #$00
|
||||
lda _y
|
||||
jsr aslax2
|
||||
clc
|
||||
adc _tablePtr
|
||||
sta ptr1
|
||||
txa
|
||||
adc _tablePtr+1
|
||||
sta ptr1+1
|
||||
ldy _x
|
||||
lda #$53
|
||||
sta (ptr1),y
|
||||
*/
|
||||
|
||||
typedef unsigned char array_t[4][4];
|
||||
|
||||
static array_t table = {
|
||||
{12, 13, 14, 15},
|
||||
{ 8, 9, 10, 11},
|
||||
{ 4, 5, 6, 7},
|
||||
{ 0, 1, 2, 3}
|
||||
};
|
||||
static array_t *tablePtr = &table;
|
||||
|
||||
static unsigned char y = 0, x;
|
||||
|
||||
void pointed_array(void)
|
||||
{
|
||||
x = 3;
|
||||
y = 1;
|
||||
(*tablePtr)[y][x] = 83;
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
pointed_array();
|
||||
return foo(2, 0) ? EXIT_SUCCESS : EXIT_FAILURE;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user