From: Sanjiv K. G. N. <sa...@no...> - 2002-08-13 13:14:05
|
Hi I recently extracted the CVS snapshot. I found a lot of changes in the code as compared to 2.3.0. I am happy that this is much more stable now. I was trying to figure out why the memory segments XINIT, XIDATA were introduced?, but couldn't get them. Plese help. Regards Sanjiv -----Original Message----- From: Bernhard Held [mailto:ber...@be...] Sent: Friday, April 26, 2002 3:32 PM To: Royce & Sharal Pereira; SDCC list Subject: Re: [Sdcc-user] SDCC v 2.3.0 > V2.3.1 works fine, thanks!! Ufff :-) > Some overhead code is generated by _sdcc_init_data which was not there in > earlier versions. What does this code do? > > __sdcc_init_data: > ; _mcs51_genXINIT() start > mov a,#l_XINIT > orl a,#l_XINIT>>8 > jz 00003$ > mov a,#s_XINIT > add a,#l_XINIT > mov r1,a > mov a,#s_XINIT>>8 > addc a,#l_XINIT>>8... etc.... This initializes data in XRAM at startup. If you define e.g. xdata char str[] = "This is a real long and boring text!"; SDCC 2.3.0 generated very inefficient code: mov dptr,#_str mov a,#0x54 movx @dptr,a mov dptr,#(_str + 0x0001) mov a,#0x68 movx @dptr,a mov dptr,#(_str + 0x0002) ... SDCC 2.3.1 gathers these data in special segments, so that it can be initialized in a short., efficient loop. Bernhard _______________________________________________ Sdcc-user mailing list Sdc...@li... https://lists.sourceforge.net/lists/listinfo/sdcc-user |