This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

C51: Newer version creates larger code??

I have 3 projects that I am porting from an old uV4 toolset to newer uV5 toolset. In all cases the new code is 5% to 10% larger and this is causing some issues.  As far as I can see, all the settings match. Is there something I am missing here, or is this a known issue with the newer tools?? Some of my projects are VERY tight for space.


Example: Old then New

C51:    BROWSE DEBUG OBJECTEXTEND PRINT(.\lst\*.lst) TABS (3)
A51:    SET (SMALL) DEBUG PRINT(.\lst\*.lst) EP

Program Size: data=54.0 xdata=945 code=6164

IDE-Version: µVision V4.72.9.0

Tool Version Numbers:
Toolchain:        PK51 Prof. Developers Kit  Version: 9.52.0.0
Toolchain Path:    C:\Keil\C51\BIN
C Compiler:         C51.Exe       V9.52.0.0
Assembler:          A51.Exe       V8.02b
Linker/Locator:     BL51.Exe       V6.22
Librarian:             LIB51.Exe       V4.29
Hex Converter:      OH51.Exe       V2.7.0.0
CPU DLL:               S8051.DLL       V3.91.0.0
Dialog DLL:         DCYG.DLL       V2.72.0.0




C51:    OPTIMIZE (8,SPEED) BROWSE DEBUG OBJECTEXTEND PRINT(.\lst\*.lst) TABS (3)
A51:    SET (SMALL) DEBUG PRINT(.\lst\*.lst) EP

Program Size: data=54.0 xdata=945 code=6405

IDE-Version: µVision V5.25.3.0

Tool Version Numbers:
Toolchain:        PK51 Prof. Developers Kit for SiLabs  Version: 9.59.0.0
Toolchain Path:    C:\Keil_v5\C51\BIN
C Compiler:         C51.exe    V9.59.0.0
Assembler:          A51.exe    V8.2.7.0
Linker/Locator:     BL51.exe    V6.22.2.0
Librarian:             LIB51.exe    V4.30.1.0
Hex Converter:      OH51.exe    V2.7.0.0
CPU DLL:               S8051.DLL            V3.122.0.0
Dialog DLL:         DCYG.DLL             V2.75.0.0

Parents
  • Good Question. I would say that many things are a little larger. :-)  StartUp and constant data is the same, as one would expect.  Here are some function side-by-side comparisons.  "N" lines are the newer compiler. I wonder if some optimization is getting ignored or something.

    Edit: fixed first line indent
                CODE    00AEH     0048H     UNIT         ?PR?LOADEP1INFIFO?USBLIB
    N           CODE    1437H     0056H     UNIT         ?PR?LOADEP1INFIFO?USBLIB
    
                CODE    0118H     04E1H     UNIT         ?PR?HOSTCMDEXEC?HOSTCMD
    N           CODE    0118H     053DH     UNIT         ?PR?HOSTCMDEXEC?HOSTCMD
    
                CODE    05F9H     020BH     UNIT         ?PR?HANDLE_SETUP?USBINT
    N           CODE    0655H     020CH     UNIT         ?PR?HANDLE_SETUP?USBINT
    
                CODE    0804H     016FH     UNIT         ?PR?GET_DESCRIPTOR?USBLIB
    N           CODE    0861H     0178H     UNIT         ?PR?GET_DESCRIPTOR?USBLIB
     
                CODE    0973H     00E7H     UNIT         ?PR?MAIN?MAIN
    N           CODE    09D9H     00E8H     UNIT         ?PR?MAIN?MAIN
    
                CODE    0A5AH     00CEH     UNIT         ?PR?GET_STATUS?USBLIB
    N           CODE    0AC1H     00D7H     UNIT         ?PR?GET_STATUS?USBLIB
    
                CODE    0B28H     00B2H     UNIT         ?CO?USBDESCR
    N           CODE    0B98H     00B2H     UNIT         ?CO?USBDESCR
    
                CODE    0BDAH     00ABH     UNIT         ?C_C51STARTUP
    N           CODE    0C4AH     00ABH     UNIT         ?C_C51STARTUP
    
                CODE    0C85H     00AAH     UNIT         ?PR?_FLASHWRITEBLOCK?FLASH
    N           CODE    0CF5H     00AAH     UNIT         ?PR?_FLASHWRITEBLOCK?FLASH
    
                CODE    0D2FH     00A4H     UNIT         ?C?LIB_CODE
    N           CODE    0E47H     00A4H     UNIT         ?C?LIB_CODE
    
                CODE    0DD3H     0098H     UNIT         ?PR?USB0_ISR?USBINT
    N           CODE    101FH     0098H     UNIT         ?PR?USB0_ISR?USBINT
     
                CODE    0E6BH     0095H     UNIT         ?PR?CLEAR_FEATURE?USBLIB
    N           CODE    0EEBH     009AH     UNIT         ?PR?CLEAR_FEATURE?USBLIB
    
                CODE    0F00H     0095H     UNIT         ?PR?SET_FEATURE?USBLIB
    N           CODE    0F85H     009AH     UNIT         ?PR?SET_FEATURE?USBLIB

Reply
  • Good Question. I would say that many things are a little larger. :-)  StartUp and constant data is the same, as one would expect.  Here are some function side-by-side comparisons.  "N" lines are the newer compiler. I wonder if some optimization is getting ignored or something.

    Edit: fixed first line indent
                CODE    00AEH     0048H     UNIT         ?PR?LOADEP1INFIFO?USBLIB
    N           CODE    1437H     0056H     UNIT         ?PR?LOADEP1INFIFO?USBLIB
    
                CODE    0118H     04E1H     UNIT         ?PR?HOSTCMDEXEC?HOSTCMD
    N           CODE    0118H     053DH     UNIT         ?PR?HOSTCMDEXEC?HOSTCMD
    
                CODE    05F9H     020BH     UNIT         ?PR?HANDLE_SETUP?USBINT
    N           CODE    0655H     020CH     UNIT         ?PR?HANDLE_SETUP?USBINT
    
                CODE    0804H     016FH     UNIT         ?PR?GET_DESCRIPTOR?USBLIB
    N           CODE    0861H     0178H     UNIT         ?PR?GET_DESCRIPTOR?USBLIB
     
                CODE    0973H     00E7H     UNIT         ?PR?MAIN?MAIN
    N           CODE    09D9H     00E8H     UNIT         ?PR?MAIN?MAIN
    
                CODE    0A5AH     00CEH     UNIT         ?PR?GET_STATUS?USBLIB
    N           CODE    0AC1H     00D7H     UNIT         ?PR?GET_STATUS?USBLIB
    
                CODE    0B28H     00B2H     UNIT         ?CO?USBDESCR
    N           CODE    0B98H     00B2H     UNIT         ?CO?USBDESCR
    
                CODE    0BDAH     00ABH     UNIT         ?C_C51STARTUP
    N           CODE    0C4AH     00ABH     UNIT         ?C_C51STARTUP
    
                CODE    0C85H     00AAH     UNIT         ?PR?_FLASHWRITEBLOCK?FLASH
    N           CODE    0CF5H     00AAH     UNIT         ?PR?_FLASHWRITEBLOCK?FLASH
    
                CODE    0D2FH     00A4H     UNIT         ?C?LIB_CODE
    N           CODE    0E47H     00A4H     UNIT         ?C?LIB_CODE
    
                CODE    0DD3H     0098H     UNIT         ?PR?USB0_ISR?USBINT
    N           CODE    101FH     0098H     UNIT         ?PR?USB0_ISR?USBINT
     
                CODE    0E6BH     0095H     UNIT         ?PR?CLEAR_FEATURE?USBLIB
    N           CODE    0EEBH     009AH     UNIT         ?PR?CLEAR_FEATURE?USBLIB
    
                CODE    0F00H     0095H     UNIT         ?PR?SET_FEATURE?USBLIB
    N           CODE    0F85H     009AH     UNIT         ?PR?SET_FEATURE?USBLIB

Children