LLVMにRenesas RL78をPortingしようとしているのかな?

こんにちは。NoMaYです。

ウェブで調べ物をしていて気付いたのですが、RenesasさんはLLVM(今はGCCと並ぶ著名なフリーコンパイラ)にRL78をPortingしようとしているのかも、、、

[llvm-dev] New LLVM backend for Renesas RL78 MCU
Sebastian Perta via llvm-dev llvm-dev at lists.llvm.org
Wed Apr 1 10:26:05 PDT 2020
lists.llvm.org/pipermail/llvm-dev/2020-April/140546.html
 

Parents
  • こんにちは。NoMaYです。

    ライブラリ分その他を除いた手元のソースから生成されたコードのサイズは以下の通りでした。

    手持ちのプログラムその2

    LLVM-RL78   41,195 バイト@10.0.0.202107
    CC-RL       33,258 バイト@V1.10.00

     
    なお、ライブラリ分その他を含んだサイズは以下の通りでした。(先日投稿した内容です。)

    手持ちのプログラムその2

    LLVM-RL78   46,198 バイト@10.0.0.202107
    CC-RL       34,766 バイト@V1.10.00

     
    以下、元データです。なお、マップファイル全体や生成されたリストファイルやダンプファイルを以下のzipファイルに固めてあります。

    rl78g14_llvm_rtosdemo_map_dump_20210804.zip

    LLVM-RL78(10.0.0.202107)の場合:

    手元のソースから生成されたコードのサイズ = (2c2  - d8) + (39c4  - 3820) + (d82a - 3acd) = a0eb = 41195 バイト

    mapファイルより抜粋

         VMA      LMA     Size Align Out     In      Symbol
    ...略...
          d8       d8      1ea     2 .lowtext
          d8       d8        0     2         <internal>:(.plt)
          d8       d8        4     1         ./src/FreeRTOS/Source/portable/Renesas/LLVMRL78/port.o:(.lowtext)
          d8       d8        4     1                 _prvTaskExitError
          dc       dc       47     1         ./src/FreeRTOS/Source/portable/Renesas/LLVMRL78/portasm.o:(.lowtext.vPortYield)
          dc       dc        0     1                 _vPortYield
          dc       dc        0     1                 _vSoftwareInterruptISR
    ...略...
         29a      29a       15     1         ./src/r_cg_serial_user.o:(.lowtext.u_wdt_interrupt)
         29a      29a       15     1                 _u_wdt_interrupt
         2af      2af       13     1         ./src/r_cg_serial_user.o:(.lowtext._u_wdt_interrupt)
         2af      2af       13     1                 __u_wdt_interrupt
         2c2      2c2        0     1         . = ALIGN ( 2 )
    ...略...
        3820     3820     aa84     4 .text
        3820     3820        0     1         . = ALIGN ( 2 )
        3820     3820       ae     4         ./src/FreeRTOS_Demo/Full_Demo/RegTest.o:(.text)
        3820     3820        0     1                 _vRegTest1Task
        3831     3831        0     1                 .loop1
        3878     3878        0     1                 _vRegTest2Task
        3889     3889        0     1                 .loop2
        38d0     38d0       f2     4         ./generate/start.o:(.text)
        38d2     38d2        0     1                 _PowerON_Reset
    ...略...
        39b4     39b4        0     1                 __rl78_init
        39bd     39bd        0     1                 __rl78_fini
        39c4     39c4       11     4         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-memcpy.o):(.text)
        39c4     39c4       11     1                 _memcpy
        39d8     39d8       13     4         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-memset.o):(.text)
        39d8     39d8       13     1                 _memset
        39ec     39ec        f     4         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-memchr.o):(.text)
        39ec     39ec        f     1                 _memchr
        39fc     39fc       24     4         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-memmove.o):(.text)
        39fc     39fc       24     1                 _memmove
        3a20     3a20       11     4         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-strcmp.o):(.text)
        3a20     3a20       11     1                 _strcmp
        3a34     3a34        d     4         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-strcpy.o):(.text)
        3a34     3a34        d     1                 _strcpy
        3a44     3a44        b     4         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-strlen.o):(.text)
        3a44     3a44        b     1                 _strlen
        3a50     3a50       1b     4         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-strncat.o):(.text)
        3a50     3a50       1b     1                 _strncat
        3a6c     3a6c       16     4         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-strncmp.o):(.text)
        3a6c     3a6c       16     1                 _strncmp
        3a84     3a84       14     4         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-strncpy.o):(.text)
        3a84     3a84       14     1                 _strncpy
        3a98     3a98       26     4         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\rl78\s3\lib\baremetal\libclang_rt.builtins-rl78.a(mulsi3.S.obj):(.text)
        3a98     3a98        0     1                 __COM_lmul
        3a98     3a98        0     1                 ___mulsi3
        3ac0     3ac0        d     4         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\rl78\s3\lib\baremetal\libclang_rt.builtins-rl78.a(ashlhi3.S.obj):(.text)
        3ac0     3ac0        0     1                 ___ashlhi3
        3acd     3acd        5     1         ./src/frtos_startup/freertos_helper.o:(.text.__malloc_r)
        3acd     3acd        5     1                 __malloc_r
        3ad2     3ad2        4     1         ./src/frtos_startup/freertos_helper.o:(.text.__free_r)
        3ad2     3ad2        4     1                 __free_r
        3ad6     3ad6        5     1         ./src/frtos_startup/freertos_helper.o:(.text.__realloc_r)
        3ad6     3ad6        5     1                 __realloc_r
        3adb     3adb       2f     1         ./src/frtos_startup/freertos_helper.o:(.text._vTaskNotifyGiveFromISR_R_Helper)
        3adb     3adb       2f     1                 _vTaskNotifyGiveFromISR_R_Helper
    ...略...
        d819     d819       11     1         ./src/r_main.o:(.text._main)
        d819     d819       11     1                 _main
        d82a     d82a       42     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-sprintf.o):(.text._sprintf)
        d82a     d82a       42     1                 _siprintf
        d82a     d82a       42     1                 _sprintf
        d86c     d86c      112     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-svfprintf.o):(.text.___ssputs_r)
        d86c     d86c      112     1                 ___ssputs_r
        d97e     d97e      2a0     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-svfprintf.o):(.text.__svfprintf_r)
        d97e     d97e      2a0     1                 __svfiprintf_r
        d97e     d97e      2a0     1                 __svfprintf_r
        dc1e     dc1e       13     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-svfprintf.o):(.text._OUTLINED_FUNCTION_0)
        dc1e     dc1e       13     1                 _OUTLINED_FUNCTION_0
        dc31     dc31        a     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-svfprintf.o):(.text._OUTLINED_FUNCTION_1)
        dc31     dc31        a     1                 _OUTLINED_FUNCTION_1
        dc3b     dc3b        f     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-svfprintf.o):(.text._OUTLINED_FUNCTION_2)
        dc3b     dc3b        f     1                 _OUTLINED_FUNCTION_2
        dc4a     dc4a        c     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-svfprintf.o):(.text._OUTLINED_FUNCTION_3)
        dc4a     dc4a        c     1                 _OUTLINED_FUNCTION_3
        dc56     dc56        a     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-svfprintf.o):(.text._OUTLINED_FUNCTION_4)
        dc56     dc56        a     1                 _OUTLINED_FUNCTION_4
        dc60     dc60        8     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-svfprintf.o):(.text._OUTLINED_FUNCTION_5)
        dc60     dc60        8     1                 _OUTLINED_FUNCTION_5
        dc68     dc68        8     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-svfprintf.o):(.text._OUTLINED_FUNCTION_6)
        dc68     dc68        8     1                 _OUTLINED_FUNCTION_6
        dc70     dc70        8     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-svfprintf.o):(.text._OUTLINED_FUNCTION_7)
        dc70     dc70        8     1                 _OUTLINED_FUNCTION_7
        dc78     dc78        6     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-svfprintf.o):(.text._OUTLINED_FUNCTION_8)
        dc78     dc78        6     1                 _OUTLINED_FUNCTION_8
        dc7e     dc7e      1b8     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-vfprintf_i.o):(.text.__printf_common)
        dc7e     dc7e      1b8     1                 __printf_common
        de36     de36      449     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-vfprintf_i.o):(.text.__printf_i)
        de36     de36      449     1                 __printf_i
        e27f     e27f        7     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-vfprintf_i.o):(.text._OUTLINED_FUNCTION_0)
        e27f     e27f        7     1                 _OUTLINED_FUNCTION_0
        e286     e286        7     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-vfprintf_i.o):(.text._OUTLINED_FUNCTION_1)
        e286     e286        7     1                 _OUTLINED_FUNCTION_1
        e28d     e28d        6     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-vfprintf_i.o):(.text._OUTLINED_FUNCTION_2)
        e28d     e28d        6     1                 _OUTLINED_FUNCTION_2
        e293     e293        a     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-vfprintf_i.o):(.text._OUTLINED_FUNCTION_3)
        e293     e293        a     1                 _OUTLINED_FUNCTION_3
        e29d     e29d        6     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-vfprintf_i.o):(.text._OUTLINED_FUNCTION_4)
        e29d     e29d        6     1                 _OUTLINED_FUNCTION_4
        e2a3     e2a3        1     1         . = ALIGN ( 2 )
        e2a4     e2a4        0     1 .textf
        e2a4     e2a4        0     1         . = ALIGN ( 2 )
    ...略...

     
    CC-RL(V1.10)の場合:

    手元のソースから生成されたコードのサイズ = 24b + 7f9f = 81ea = 33258 バイト(10進)

    mapファイルより抜粋

    SECTION                            START      END         SIZE   ALIGN
    ...略...
    .text
                                      00000273  000004bd       24b   1
    .RLIB
                                      000004cb  000004e9        1f   1
    .SLIB
                                      000004ea  00000aef       606   1
    ...略...
    .textf
                                      00003912  0000b8b0      7f9f   1
    ...略...                                                                                               
    SECTION=
    FILE=                               START        END    SIZE
      SYMBOL                            ADDR        SIZE    INFO      COUNTS  OPT
    ...略...
    SECTION=.text
    FILE=.\generate\CallWalker\cstart.obj
                                      00000273  000002bb        49
      _start
                                      00000273         0   entry,g         0
    ...略...
      _u_wdt_interrupt@1
                                      00000497        13   func ,l         0
      __u_wdt_interrupt@1
                                      000004aa        14   func ,l         1  ch

    SECTION=.RLIB
    FILE=memcpy
                                      000004cb  000004db        11
      _memcpy
                                      000004cb         0   none ,g         8
    FILE=memset
                                      000004dc  000004e9         e
      _memset
                                      000004dc         0   none ,g         d

    SECTION=.SLIB
    FILE=sprintf_tiny
                                      000004ea  000005a3        ba
      _sprintf_tiny
                                      000004ea        a2   func ,g         6
      __REL_sp@1
                                      0000058c        18   func ,l         2
    FILE=strcmp
                                      000005a4  000005b4        11
      _strcmp
                                      000005a4         0   none ,g         1
    FILE=strcpy
                                      000005b5  000005c1         d
      _strcpy
                                      000005b5         0   none ,g         5
    FILE=strlen
                                      000005c2  000005cc         b
      _strlen
                                      000005c2         0   none ,g         d
    FILE=strncat
                                      000005cd  000005e7        1b
      _strncat
                                      000005cd         0   none ,g         4
    FILE=strncmp
                                      000005e8  000005fd        16
      _strncmp
                                      000005e8         0   none ,g         1
    FILE=strncpy
                                      000005fe  00000611        14
      _strncpy
                                      000005fe         0   none ,g         3
    FILE=_REL_print_tiny
                                      00000612  00000ae5       4d4
      __REL_print_tiny
                                      00000612       41b   func ,g         1
      __CommonCode@17
                                      00000a2d         6   func ,l         3
      __CommonCode@16
                                      00000a33         6   func ,l         5
      __CommonCode@14
                                      00000a39         a   func ,l         4
      __CommonCode@13
                                      00000a43         9   func ,l         2
      __CommonCode@12
                                      00000a4c         a   func ,l         2
      __CommonCode@11
                                      00000a56        10   func ,l         2
      __CommonCode@10
                                      00000a66         f   func ,l         2
      __CommonCode@9
                                      00000a75        12   func ,l         2
      __CommonCode@8
                                      00000a87         7   func ,l         2
      __CommonCode@7
                                      00000a8e         6   func ,l         3
      __CommonCode@18
                                      00000a94         8   func ,l         2
      __CommonCode@6
                                      00000a9c         7   func ,l         2
      __CommonCode@15
                                      00000aa3         3   func ,l         2
      __CommonCode@5
                                      00000aa6         3   func ,l         8
      __CommonCode@4
                                      00000aa9         9   func ,l         2
      __CommonCode@3
                                      00000ab2        1d   func ,l         5
      __CommonCode@2
                                      00000acf         5   func ,l         6
      __CommonCode@1
                                      00000ad4         7   func ,l         5
      __CommonCode@0
                                      00000adb         b   func ,l         2
    FILE=isdigit
                                      00000ae6  00000aef         a
      _isdigit
                                      00000ae6         0   none ,g         1
    ...略...
    SECTION=.textf
    FILE=.\generate\CallWalker\cstart.obj
                                      00003912  00003959        48
      _INIT_BSS
                                      00003912         0   none ,g         1
      _INIT_DATA
                                      00003931         0   none ,g         1
      _exit
                                      00003958         0   none ,g         2
    FILE=.\generate\CallWalker\resetprg.obj
                                      0000395a  00003968         f
      _PowerON_Reset_PC
                                      0000395a         f   func ,g         1  ch
    ...略...
    FILE=.\src\UART3.obj
                                      0000b7fc  0000b8b0        b5
      _u_uart3_init_bf
                                      0000b7fc        16   func ,g         1  ch
      _u_uart3_get_blk
                                      0000b812        79   func ,g         1  ch
      _u_uart3_callback_receivedata
                                      0000b88b        26   func ,g         1

     

Reply
  • こんにちは。NoMaYです。

    ライブラリ分その他を除いた手元のソースから生成されたコードのサイズは以下の通りでした。

    手持ちのプログラムその2

    LLVM-RL78   41,195 バイト@10.0.0.202107
    CC-RL       33,258 バイト@V1.10.00

     
    なお、ライブラリ分その他を含んだサイズは以下の通りでした。(先日投稿した内容です。)

    手持ちのプログラムその2

    LLVM-RL78   46,198 バイト@10.0.0.202107
    CC-RL       34,766 バイト@V1.10.00

     
    以下、元データです。なお、マップファイル全体や生成されたリストファイルやダンプファイルを以下のzipファイルに固めてあります。

    rl78g14_llvm_rtosdemo_map_dump_20210804.zip

    LLVM-RL78(10.0.0.202107)の場合:

    手元のソースから生成されたコードのサイズ = (2c2  - d8) + (39c4  - 3820) + (d82a - 3acd) = a0eb = 41195 バイト

    mapファイルより抜粋

         VMA      LMA     Size Align Out     In      Symbol
    ...略...
          d8       d8      1ea     2 .lowtext
          d8       d8        0     2         <internal>:(.plt)
          d8       d8        4     1         ./src/FreeRTOS/Source/portable/Renesas/LLVMRL78/port.o:(.lowtext)
          d8       d8        4     1                 _prvTaskExitError
          dc       dc       47     1         ./src/FreeRTOS/Source/portable/Renesas/LLVMRL78/portasm.o:(.lowtext.vPortYield)
          dc       dc        0     1                 _vPortYield
          dc       dc        0     1                 _vSoftwareInterruptISR
    ...略...
         29a      29a       15     1         ./src/r_cg_serial_user.o:(.lowtext.u_wdt_interrupt)
         29a      29a       15     1                 _u_wdt_interrupt
         2af      2af       13     1         ./src/r_cg_serial_user.o:(.lowtext._u_wdt_interrupt)
         2af      2af       13     1                 __u_wdt_interrupt
         2c2      2c2        0     1         . = ALIGN ( 2 )
    ...略...
        3820     3820     aa84     4 .text
        3820     3820        0     1         . = ALIGN ( 2 )
        3820     3820       ae     4         ./src/FreeRTOS_Demo/Full_Demo/RegTest.o:(.text)
        3820     3820        0     1                 _vRegTest1Task
        3831     3831        0     1                 .loop1
        3878     3878        0     1                 _vRegTest2Task
        3889     3889        0     1                 .loop2
        38d0     38d0       f2     4         ./generate/start.o:(.text)
        38d2     38d2        0     1                 _PowerON_Reset
    ...略...
        39b4     39b4        0     1                 __rl78_init
        39bd     39bd        0     1                 __rl78_fini
        39c4     39c4       11     4         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-memcpy.o):(.text)
        39c4     39c4       11     1                 _memcpy
        39d8     39d8       13     4         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-memset.o):(.text)
        39d8     39d8       13     1                 _memset
        39ec     39ec        f     4         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-memchr.o):(.text)
        39ec     39ec        f     1                 _memchr
        39fc     39fc       24     4         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-memmove.o):(.text)
        39fc     39fc       24     1                 _memmove
        3a20     3a20       11     4         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-strcmp.o):(.text)
        3a20     3a20       11     1                 _strcmp
        3a34     3a34        d     4         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-strcpy.o):(.text)
        3a34     3a34        d     1                 _strcpy
        3a44     3a44        b     4         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-strlen.o):(.text)
        3a44     3a44        b     1                 _strlen
        3a50     3a50       1b     4         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-strncat.o):(.text)
        3a50     3a50       1b     1                 _strncat
        3a6c     3a6c       16     4         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-strncmp.o):(.text)
        3a6c     3a6c       16     1                 _strncmp
        3a84     3a84       14     4         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-strncpy.o):(.text)
        3a84     3a84       14     1                 _strncpy
        3a98     3a98       26     4         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\rl78\s3\lib\baremetal\libclang_rt.builtins-rl78.a(mulsi3.S.obj):(.text)
        3a98     3a98        0     1                 __COM_lmul
        3a98     3a98        0     1                 ___mulsi3
        3ac0     3ac0        d     4         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\rl78\s3\lib\baremetal\libclang_rt.builtins-rl78.a(ashlhi3.S.obj):(.text)
        3ac0     3ac0        0     1                 ___ashlhi3
        3acd     3acd        5     1         ./src/frtos_startup/freertos_helper.o:(.text.__malloc_r)
        3acd     3acd        5     1                 __malloc_r
        3ad2     3ad2        4     1         ./src/frtos_startup/freertos_helper.o:(.text.__free_r)
        3ad2     3ad2        4     1                 __free_r
        3ad6     3ad6        5     1         ./src/frtos_startup/freertos_helper.o:(.text.__realloc_r)
        3ad6     3ad6        5     1                 __realloc_r
        3adb     3adb       2f     1         ./src/frtos_startup/freertos_helper.o:(.text._vTaskNotifyGiveFromISR_R_Helper)
        3adb     3adb       2f     1                 _vTaskNotifyGiveFromISR_R_Helper
    ...略...
        d819     d819       11     1         ./src/r_main.o:(.text._main)
        d819     d819       11     1                 _main
        d82a     d82a       42     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-sprintf.o):(.text._sprintf)
        d82a     d82a       42     1                 _siprintf
        d82a     d82a       42     1                 _sprintf
        d86c     d86c      112     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-svfprintf.o):(.text.___ssputs_r)
        d86c     d86c      112     1                 ___ssputs_r
        d97e     d97e      2a0     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-svfprintf.o):(.text.__svfprintf_r)
        d97e     d97e      2a0     1                 __svfiprintf_r
        d97e     d97e      2a0     1                 __svfprintf_r
        dc1e     dc1e       13     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-svfprintf.o):(.text._OUTLINED_FUNCTION_0)
        dc1e     dc1e       13     1                 _OUTLINED_FUNCTION_0
        dc31     dc31        a     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-svfprintf.o):(.text._OUTLINED_FUNCTION_1)
        dc31     dc31        a     1                 _OUTLINED_FUNCTION_1
        dc3b     dc3b        f     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-svfprintf.o):(.text._OUTLINED_FUNCTION_2)
        dc3b     dc3b        f     1                 _OUTLINED_FUNCTION_2
        dc4a     dc4a        c     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-svfprintf.o):(.text._OUTLINED_FUNCTION_3)
        dc4a     dc4a        c     1                 _OUTLINED_FUNCTION_3
        dc56     dc56        a     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-svfprintf.o):(.text._OUTLINED_FUNCTION_4)
        dc56     dc56        a     1                 _OUTLINED_FUNCTION_4
        dc60     dc60        8     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-svfprintf.o):(.text._OUTLINED_FUNCTION_5)
        dc60     dc60        8     1                 _OUTLINED_FUNCTION_5
        dc68     dc68        8     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-svfprintf.o):(.text._OUTLINED_FUNCTION_6)
        dc68     dc68        8     1                 _OUTLINED_FUNCTION_6
        dc70     dc70        8     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-svfprintf.o):(.text._OUTLINED_FUNCTION_7)
        dc70     dc70        8     1                 _OUTLINED_FUNCTION_7
        dc78     dc78        6     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-svfprintf.o):(.text._OUTLINED_FUNCTION_8)
        dc78     dc78        6     1                 _OUTLINED_FUNCTION_8
        dc7e     dc7e      1b8     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-vfprintf_i.o):(.text.__printf_common)
        dc7e     dc7e      1b8     1                 __printf_common
        de36     de36      449     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-vfprintf_i.o):(.text.__printf_i)
        de36     de36      449     1                 __printf_i
        e27f     e27f        7     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-vfprintf_i.o):(.text._OUTLINED_FUNCTION_0)
        e27f     e27f        7     1                 _OUTLINED_FUNCTION_0
        e286     e286        7     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-vfprintf_i.o):(.text._OUTLINED_FUNCTION_1)
        e286     e286        7     1                 _OUTLINED_FUNCTION_1
        e28d     e28d        6     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-vfprintf_i.o):(.text._OUTLINED_FUNCTION_2)
        e28d     e28d        6     1                 _OUTLINED_FUNCTION_2
        e293     e293        a     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-vfprintf_i.o):(.text._OUTLINED_FUNCTION_3)
        e293     e293        a     1                 _OUTLINED_FUNCTION_3
        e29d     e29d        6     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-vfprintf_i.o):(.text._OUTLINED_FUNCTION_4)
        e29d     e29d        6     1                 _OUTLINED_FUNCTION_4
        e2a3     e2a3        1     1         . = ALIGN ( 2 )
        e2a4     e2a4        0     1 .textf
        e2a4     e2a4        0     1         . = ALIGN ( 2 )
    ...略...

     
    CC-RL(V1.10)の場合:

    手元のソースから生成されたコードのサイズ = 24b + 7f9f = 81ea = 33258 バイト(10進)

    mapファイルより抜粋

    SECTION                            START      END         SIZE   ALIGN
    ...略...
    .text
                                      00000273  000004bd       24b   1
    .RLIB
                                      000004cb  000004e9        1f   1
    .SLIB
                                      000004ea  00000aef       606   1
    ...略...
    .textf
                                      00003912  0000b8b0      7f9f   1
    ...略...                                                                                               
    SECTION=
    FILE=                               START        END    SIZE
      SYMBOL                            ADDR        SIZE    INFO      COUNTS  OPT
    ...略...
    SECTION=.text
    FILE=.\generate\CallWalker\cstart.obj
                                      00000273  000002bb        49
      _start
                                      00000273         0   entry,g         0
    ...略...
      _u_wdt_interrupt@1
                                      00000497        13   func ,l         0
      __u_wdt_interrupt@1
                                      000004aa        14   func ,l         1  ch

    SECTION=.RLIB
    FILE=memcpy
                                      000004cb  000004db        11
      _memcpy
                                      000004cb         0   none ,g         8
    FILE=memset
                                      000004dc  000004e9         e
      _memset
                                      000004dc         0   none ,g         d

    SECTION=.SLIB
    FILE=sprintf_tiny
                                      000004ea  000005a3        ba
      _sprintf_tiny
                                      000004ea        a2   func ,g         6
      __REL_sp@1
                                      0000058c        18   func ,l         2
    FILE=strcmp
                                      000005a4  000005b4        11
      _strcmp
                                      000005a4         0   none ,g         1
    FILE=strcpy
                                      000005b5  000005c1         d
      _strcpy
                                      000005b5         0   none ,g         5
    FILE=strlen
                                      000005c2  000005cc         b
      _strlen
                                      000005c2         0   none ,g         d
    FILE=strncat
                                      000005cd  000005e7        1b
      _strncat
                                      000005cd         0   none ,g         4
    FILE=strncmp
                                      000005e8  000005fd        16
      _strncmp
                                      000005e8         0   none ,g         1
    FILE=strncpy
                                      000005fe  00000611        14
      _strncpy
                                      000005fe         0   none ,g         3
    FILE=_REL_print_tiny
                                      00000612  00000ae5       4d4
      __REL_print_tiny
                                      00000612       41b   func ,g         1
      __CommonCode@17
                                      00000a2d         6   func ,l         3
      __CommonCode@16
                                      00000a33         6   func ,l         5
      __CommonCode@14
                                      00000a39         a   func ,l         4
      __CommonCode@13
                                      00000a43         9   func ,l         2
      __CommonCode@12
                                      00000a4c         a   func ,l         2
      __CommonCode@11
                                      00000a56        10   func ,l         2
      __CommonCode@10
                                      00000a66         f   func ,l         2
      __CommonCode@9
                                      00000a75        12   func ,l         2
      __CommonCode@8
                                      00000a87         7   func ,l         2
      __CommonCode@7
                                      00000a8e         6   func ,l         3
      __CommonCode@18
                                      00000a94         8   func ,l         2
      __CommonCode@6
                                      00000a9c         7   func ,l         2
      __CommonCode@15
                                      00000aa3         3   func ,l         2
      __CommonCode@5
                                      00000aa6         3   func ,l         8
      __CommonCode@4
                                      00000aa9         9   func ,l         2
      __CommonCode@3
                                      00000ab2        1d   func ,l         5
      __CommonCode@2
                                      00000acf         5   func ,l         6
      __CommonCode@1
                                      00000ad4         7   func ,l         5
      __CommonCode@0
                                      00000adb         b   func ,l         2
    FILE=isdigit
                                      00000ae6  00000aef         a
      _isdigit
                                      00000ae6         0   none ,g         1
    ...略...
    SECTION=.textf
    FILE=.\generate\CallWalker\cstart.obj
                                      00003912  00003959        48
      _INIT_BSS
                                      00003912         0   none ,g         1
      _INIT_DATA
                                      00003931         0   none ,g         1
      _exit
                                      00003958         0   none ,g         2
    FILE=.\generate\CallWalker\resetprg.obj
                                      0000395a  00003968         f
      _PowerON_Reset_PC
                                      0000395a         f   func ,g         1  ch
    ...略...
    FILE=.\src\UART3.obj
                                      0000b7fc  0000b8b0        b5
      _u_uart3_init_bf
                                      0000b7fc        16   func ,g         1  ch
      _u_uart3_get_blk
                                      0000b812        79   func ,g         1  ch
      _u_uart3_callback_receivedata
                                      0000b88b        26   func ,g         1

     

Children
  • 中の人です。

    コンパイラ開発チームに見解を確認しましたので、展開します。

     

    CC-RLは長年の追加/改善によりリリース当初より大幅に最適化能力を向上させてきました。(ULPMark世界最高スコア獲得もこの最適化が貢献してます。)

     

    LLVM for RL78も最適化能力は高いですが、プログラムにも因りますが、CC-RLと比較するとまだ差が大きいケースもあります。

    今後、LLVM for RL78へも技術支援を行って最適化を強化していきたいと思います。

    NoMaYさんが指摘されていたビット操作命令の問題やレジスタバンク0固定の問題にも技術支援を行わせて頂きました。ありがとうございました。

    結果は7月修正版に反映されています。

     

    NoMaYさんの上記データ&ファイルも参考にさせて頂きます。

    今後もRulzあるいはCyberThorへの積極的なアクセスを頂けると助かります。

  • チョコです。

    >CC-RLは長年の追加/改善によりリリース当初より大幅に最適化能力を向上させてきました。

    そうなんですか。

    私は、アセンブラの時代の人間ですが(実はハードの人間ですが)CC-RLの吐き出したコードを逆アセンブラで眺めて、「無駄なことをやっているなぁ」と感じていたんです。やはり、普通とは感覚がずれているのかなぁ。