CCS C Software and Maintenance Offers
FAQFAQ   FAQForum Help   FAQOfficial CCS Support   SearchSearch  RegisterRegister 

ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

CCS does not monitor this forum on a regular basis.

Please do not post bug reports on this forum. Send them to support@ccsinfo.com

Compiler command line v5.098 problem?
Goto page 1, 2  Next
 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
Josep Robert



Joined: 27 Mar 2018
Posts: 25

View user's profile Send private message

Compiler command line v5.098 problem?
PostPosted: Mon Dec 28, 2020 1:33 am     Reply with quote

Today I've received the last ccs command line compiler version v5.098.

I’ve recompiled some of my projects for PIC18LF47K40 and found that the used ROM increases a 6%-7%.

Looking at .lst files I realized that there are a lot of these differences:

Code:

ccs 5.097            ccs 5.098

BNZ xxxx    <--->    BTFSS STATUS.2   
                     GOTO yyyy

2 bytes     <--->    6 bytes


Is this a malfunction? Is this a bad improvement?


Code:

--------------------------------------------
CCS PCH C Compiler, Version 5.097, 53681               21-dic.-20 09:49

               Filename:   C:\Users\...\production\main.lst

               ROM used:   111890 bytes (85%) <<<<<<<<<<<<<<<<
                           Largest free fragment is 9216
               RAM used:   3294 (40%) at main() level
                           3509 (43%) worst case
               Stack used: 7 locations (4 in main + 3 for interrupts)
               Stack size: 31
--------------------------------------------


Code:

--------------------------------------------
CCS PCH C Compiler, Version 5.098, 53681               28-dic.-20 07:43

               Filename:   C:\Users\...\production\main.lst

               ROM used:   120320 bytes (92%) <<<<<<<<<<<<<<<<
                           Largest free fragment is 6144
               RAM used:   3294 (40%) at main() level
                           3509 (43%) worst case
               Stack used: 7 locations (4 in main + 3 for interrupts)
               Stack size: 31

*
--------------------------------------------
Ttelmah



Joined: 11 Mar 2010
Posts: 19215

View user's profile Send private message

PostPosted: Mon Dec 28, 2020 1:39 am     Reply with quote

The difference is that the original branch will only support a 'local' jump.
So only to an address within -128 to +127 of the current instruction.
The new code supports a jump to anywhere in the ROM.
Either something in the code has moved, requiring a long jump to be used,
or they have decided to implement the long jump because they have had
issues with things being too far away.
Josep Robert



Joined: 27 Mar 2018
Posts: 25

View user's profile Send private message

PostPosted: Mon Dec 28, 2020 2:36 am     Reply with quote

Thanks Ttelmah

The code is 100.00% the same. The only difference is the compiler version used.

I've have the two versions installed; with the previous version a 7% less flash is used.
temtronic



Joined: 01 Jul 2010
Posts: 9097
Location: Greensville,Ontario

View user's profile Send private message

PostPosted: Mon Dec 28, 2020 5:39 am     Reply with quote

One possible reason for the increased codespace is that the new compiler's algorithm for putting code into the PIC is different than previous version. Your program uses 85% of flash. quite large, I assume with lots of functions. The compiler will somehow figure out how to put the code for a function into one bank of memory. This can get 'tricky' when there's lots of program to consider.
Think of functions as paragraphs in a book. They have to be complete and all of it's words have to be on the same page, so the compiler 'shuffles' them where ever it can and at the same time trying to comapct the code so each 'page' of flash is as full as possible.

As a side note.at 85% usage, in the near future, you may need to reconsider coding style when adding more features and functions to your program. You may find out that you've run out of space....

Jay
jaka



Joined: 04 May 2014
Posts: 35
Location: Finland

View user's profile Send private message

PostPosted: Mon Dec 28, 2020 7:02 am     Reply with quote

I am seeing similar things happening. All branches on 5.097 are changed to gotos on 5.098. And my program is small. ROM usage increased from 1178 bytes to 1390, that's 18% increase. This in on 18F26K83, so I am using only 2% of ROM.

It's not that I am worried about running out of ROM on this project, but it would be nice to know the reason for this change.
temtronic



Joined: 01 Jul 2010
Posts: 9097
Location: Greensville,Ontario

View user's profile Send private message

PostPosted: Mon Dec 28, 2020 7:24 am     Reply with quote

As Mr. T pointed out, the compiler now supports 'jumps anywhere in ROM', so I assume even those 'local' jumps are now using the newer,larger code.
Now if this becomes an 'issue', either in space or time, you can always try recoding inline or ASM to use 'local' jump coding.You could ask CCS to modify the compiler so that 'If the jump <126 locations, use 'local jump' else use 'long jump' code.
Or, simply use and older 'prelongjump' version of the compiler.
There are several possible solutions. Which you choose depends on your needs.
Ttelmah



Joined: 11 Mar 2010
Posts: 19215

View user's profile Send private message

PostPosted: Mon Dec 28, 2020 7:43 am     Reply with quote

It is quite interesting. They seem to be avoiding the 'relative' instructions
everywhere. RCALL's are changed to CALLs, and the relative jumps have
switched to full 16bit jumps.
Now potentially this should allow them to actually pack things better, but
comes at the cost of using more space for these instructions (and more
time - a relative jump/call is one instruction time faster than he full
versions). However there seems to be little sign that there have been any
optimisation improvements in the packing, so it does rather seem a step
backwards.
Does anyone know if any of the newest chips have an erratum on relative
jumps/calls?. If so, they may have been coding to handle this, and it has
got 'accidentally' included into the normal code. It is not mentioned in the
'recent changes'.
I think I would raise this with CCS. It seems to be a step away from good
optimisation. Sad
It is doing the same on PIC16's as well. However no sign of any change on
PIC24/33 chips (code seems identical to the old compiler on these).
temtronic



Joined: 01 Jul 2010
Posts: 9097
Location: Greensville,Ontario

View user's profile Send private message

PostPosted: Mon Dec 28, 2020 8:32 am     Reply with quote

It might be part of a 'universal' philosophy.
Trying to get the compiler to 'be all - for all' PICs.
While timing and space were a true concern,say with a PIC16C84...it's not really a problem with a PIC18F46K22 running at 64MHz.....

Reminds me of the 'bloatware' that Windoze has become....
Ttelmah



Joined: 11 Mar 2010
Posts: 19215

View user's profile Send private message

PostPosted: Mon Dec 28, 2020 11:46 am     Reply with quote

My suspicion is that possibly a stage of the build has become omitted.
If you think about it deciding if you 'can' use a relative jump is quite
complex to do. The standard approach would be to build completely with
the full jumps, and then at each one, test if the target is inside the relative
range, and if so substitute a relative jump. You may 'miss' the occasional
jump where the target is out of range, and comes into range after some
other jumps are substituted, but should get 99% of the locations where
a relative jump/call can be used. So I'd almost suspect this is the
approach used by CCS, and somehow the substitution scan is being
omitted.
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Mon Dec 28, 2020 4:18 pm     Reply with quote

I sent an email to CCS support regarding this problem, about 1 hour ago.
I pointed them to this thread and gave them a small test program that
generates GOTO's with vs. 5.098 but BRA's with vs. 5.097.

Test program:
Code:

#include <18F46K22.h>
#use delay(internal=4M)
#use rs232(baud=9600, UART1, ERRORS)

//---------------
void func3()
{
int8 i;

i = 0xAA;

printf("i = %u", i);
}

//---------------
void func2()
{
int8 i;

i = 0xAA;

func3();
}

//---------------
void func1()
{
int8 temp;

temp = 0x55;

func2();
}

//======================
void main(void)
{

func1();

while(TRUE);
}
Ttelmah



Joined: 11 Mar 2010
Posts: 19215

View user's profile Send private message

PostPosted: Tue Dec 29, 2020 12:42 am     Reply with quote

Well done PCM.
Ttelmah



Joined: 11 Mar 2010
Posts: 19215

View user's profile Send private message

PostPosted: Wed Dec 30, 2020 5:06 am     Reply with quote

Though I reported that 5.098, does not have this fault with the PIC24/33
chips, it appears it has a lot of other new problems. Code that was working
fine before now does not run, and it is behaving as if it is not initialising
variables correctly. I have variables for a state machine, and the display
format, and running on 5.098, it wakes up with these containing unexpected
values, though both are set to initial values when declared.
So as it stands, I'd suggest that people might well be advised to go
back to 5.097. 5.098, seems to have some very odd issues.... Sad
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Wed Dec 30, 2020 3:23 pm     Reply with quote

CCS says they have fixed the problem and will release the updated
version soon.
Torello



Joined: 29 Sep 2006
Posts: 111

View user's profile Send private message

PostPosted: Wed Jan 06, 2021 3:57 am     Reply with quote

Hi,

The ROM use gain v5097 to v5098 is -dramatically-!
I'm using a Pic18lf8546 on a on going project for years. Rom is pretty full and I'm really coding to save Rom resources. In version 5097 I am at 87%. Compiling the same code on with version 5098...
97% percent

Crap! All my effort demolished. Can barely add anything any more. Looks like stuck to version 5097.
I've contacted CCS to explain.
_________________
Regards, Edwin. PCWHD v5.097
jaka



Joined: 04 May 2014
Posts: 35
Location: Finland

View user's profile Send private message

PostPosted: Thu Jan 07, 2021 12:10 am     Reply with quote

5.099 is just released. I tested it, and I am getting exactly same .hex output as with 5.097 on my current project.

So it seems that the optimization bug appeared in 5.098 is fixed.
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group