I ran into an interesting case today. This is code produced by the latest snapshot (2.13.9.20121016). This is with -O, but the same basic problem appears without it. ; ; ((unsigned char*)0)[0x1234] = 5; ; jsr decsp3 jsr push0 lda #$05 ldy #$01 clc pha lda #$12 adc (sp),y sta (sp),y pla ldy #$34 jsr staspidx ; ; *(unsigned char*)(0 + 0x1234) = 5; ; lda #$05 sta $1234 Specifically, in the former case it ends up doing all the work necessary to use indirect indexed addressing for the STA, instead of just using an absolute address. I presume the compiler thinks of ((unsigned char*)0) as a variable pointer, rather than a fixed address that should be known at compile or link time? Using a global array seems to generate the compact absolute address STA that is expected. Similarly I could cast it to a struct * and access that struct's members and it still generates an absolute address. The problem only seems to be when I use [] with the cast pointer. -- Brad Smith ---------------------------------------------------------------------- To unsubscribe from the list send mail to majordomo@musoftware.de with the string "unsubscribe cc65" in the body(!) of the mail.Received on Wed Oct 17 01:53:19 2012
This archive was generated by hypermail 2.1.8 : 2012-10-17 01:53:23 CEST