RXv3コアのレジスタ一括退避機能の使い方(Register Bank Save Function Usage)を調べてみるスレッド

こんにちは。NoMaYです。

RXv3コア搭載の120MH動作のRXマイコンも、RX66T以降、RX671、RX66N、RX660と品種が増えてきましたが、RXv3コアのセールスポイントの1つであるレジスタ一括退避機能の使い方が今ひとつピンと来ません。そこで、いつものように、ちょっと好奇心からスレッドを立ててみました。(注: RX66Tは、160MHz動作、レジスタ一括退避機能未搭載、です。) いつものように、ぼちぼちと続きます。

ホワイトペーパー
卓越したMCU性能と電力効率を実現するRXv3コア
2019年10月
www.renesas.com/jp/ja/document/whp/introducing-rxv3-core-superior-performance-excellent-power-efficiency#page=6

割り込み応答時間の改善

モータ制御システムなどは、高速な割り込み処理によるリアルタイム性能が必要となってきます。

RXv3コアには、割り込み処理時にレジスタを高速退避/復帰するために、オプション機能として、レジスタ退避バンクと呼ばれる専用メモリを実装しています。図6に示すように、レジスタ退避バンクを使用することで割り込み応答時間を短縮でき、割り込み処理全体の時間を短縮することができます。 割り込み処理ルーチンの中で、SAVE命令を使用すると汎用レジスタとアキュムレータを1クロックで専用メモリに保存できます。RSTR命令は、保存されたレジスタを3~6cycleで復元します。レジスタ退避バンクは専用メモリを複数面持っており、多重割り込みにも対応することが可能です。

図6.割り込み応答時間の改善

レジスタ退避バンクは、割り込みハンドラだけでなく、RTOSコンテキスト切り替えにも使用できます。 RTOSコンテキスト切り替え時間は、レジスタバンク保存機能により最大20%高速化します。


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

    > DPUSHM命令(レジスタ数が多い場合(最大16レジスタ)) : 最大 16 クロック
    > DPOPM命令(レジスタ数が多い場合(最大16レジスタ))  : 最大 16 or 16+1 クロック

    コンパイラは生成コード内で以下のような命令を素朴に使用していますね。CC-RXでも特殊な対応(例えば複数命令に分割するような機能とか)は無いようでした。1つ前の投稿で書いたことの繰り返しですけれども、CC-RXの -nouse_div_inst というコンパイルオプションで抑止される命令のうち、DIV命令やDIVU命令と同等レベルとはちょっと言い難いとしても、FDIV命令と同等レベルの命令実行時間とは言えるだろうと思います。(他の多くの命令と比べて、有意に実行時間が長く、長くなっている分だけ割り込みルーチンへ飛ぶのが遅れる。)

    DPUSHM.D DR0-DR15
    DPOPM.D DR0-DR15

     
    試したソース

    double d1, d2;
    double dA, dB, dC, dD;
    static void Check_DPUSHM_DPOPM(void);
    static void Check_DPUSHM_DPOPM(void)
    {
        double d3, d4, d5, d6, d7, d8, d9, d10, d11, d12, d13, d14, d15, d16;

        d3  = d1 + d2 +  3.0;
        d4  = d1 - d2 +  4.0;
        d5  = d1 + d2 +  5.0;
        d6  = d1 - d2 +  6.0;
        d7  = d1 + d2 +  7.0;
        d8  = d1 - d2 +  8.0;
        d9  = d1 + d2 +  9.0;
        d10 = d1 - d2 + 10.0;
        d11 = d1 + d2 + 11.0;
        d12 = d1 - d2 + 12.0;
        d13 = d1 + d2 + 13.0;
        d14 = d1 - d2 + 14.0;
        d15 = d1 + d2 + 15.0;
        d16 = d1 - d2 + 16.0;

        dA = d3 + d4 + d5 + d6 + d7 + d8 + d9 + d10 + d11 + d12 + d13 + d14 + d15 + d16;
        dB = d3 * d4 * d5 * d6 * d7 * d8 * d9 * d10 * d11 * d12 * d13 * d14 * d15 * d16;
        dC = d3 - d4 - d5 - d6 - d7 - d8 - d9 - d10 - d11 - d12 - d13 - d14 - d15 - d16;
        dD = d3 / d4 / d5 / d6 / d7 / d8 / d9 / d10 / d11 / d12 / d13 / d14 / d15 / d16;
    }

     
    CC-RXでのリストファイル

                                            .SECTION    P,CODE
    00000000                         __$Check_DPUSHM_DPOPM:
                                            .STACK  __$Check_DPUSHM_DPOPM=132
    00000000 75B00F                         DPUSHM.D DR0-DR15
    00000003 FBE2rrrrrrrr                   MOV.L #_d1, R14
    00000009 FCC8E830                       DMOV.D [R14], DR3
    0000000D FBE2rrrrrrrr                   MOV.L #_d2, R14
    00000013 FCC8E810                       DMOV.D [R14], DR1
    00000017 76903021                       DADD DR1, DR3, DR2
    0000001B 769031F1                       DSUB DR1, DR3, DR15
    0000001F F9030300000840                 DMOV.D #40080000H, DRH0
    00000026 F9031300001040                 DMOV.D #40100000H, DRH1
    0000002D 76902000                       DADD DR0, DR2, DR0
    00000031 7690F0E1                       DADD DR1, DR15, DR14
    00000035 F9031300001440                 DMOV.D #40140000H, DRH1
    0000003C 769020D1                       DADD DR1, DR2, DR13
    00000040 F9031300001840                 DMOV.D #40180000H, DRH1
    00000047 7690003E                       DADD DR14, DR0, DR3
    0000004B 7690F0C1                       DADD DR1, DR15, DR12
    0000004F F9031300001C40                 DMOV.D #401C0000H, DRH1
    00000056 769020B1                       DADD DR1, DR2, DR11
    0000005A FBF2rrrrrrrr                   MOV.L #_dA, R15
    00000060 7690303D                       DADD DR13, DR3, DR3
    00000064 F9031300002040                 DMOV.D #40200000H, DRH1
    0000006B 7690F0A1                       DADD DR1, DR15, DR10
    0000006F F9031300002240                 DMOV.D #40220000H, DRH1
    00000076 7690303C                       DADD DR12, DR3, DR3
    0000007A 76902091                       DADD DR1, DR2, DR9
    0000007E F9031300002440                 DMOV.D #40240000H, DRH1
    00000085 7690F081                       DADD DR1, DR15, DR8
    00000089 7690303B                       DADD DR11, DR3, DR3
    0000008D F9031300002640                 DMOV.D #40260000H, DRH1
    00000094 76902071                       DADD DR1, DR2, DR7
    00000098 F9031300002840                 DMOV.D #40280000H, DRH1
    0000009F 7690303A                       DADD DR10, DR3, DR3
    000000A3 7690F061                       DADD DR1, DR15, DR6
    000000A7 FBE2rrrrrrrr                   MOV.L #_dB, R14
    000000AD F9031300002A40                 DMOV.D #402A0000H, DRH1
    000000B4 76902051                       DADD DR1, DR2, DR5
    000000B8 76903039                       DADD DR9, DR3, DR3
    000000BC F9031300002C40                 DMOV.D #402C0000H, DRH1
    000000C3 7690F041                       DADD DR1, DR15, DR4
    000000C7 76903038                       DADD DR8, DR3, DR3
    000000CB 76903037                       DADD DR7, DR3, DR3
    000000CF 76903036                       DADD DR6, DR3, DR3
    000000D3 76903035                       DADD DR5, DR3, DR3
    000000D7 76903014                       DADD DR4, DR3, DR1
    000000DB F9033300002E40                 DMOV.D #402E0000H, DRH3
    000000E2 76902033                       DADD DR3, DR2, DR3
    000000E6 76901023                       DADD DR3, DR1, DR2
    000000EA F9031300003040                 DMOV.D #40300000H, DRH1
    000000F1 7690F011                       DADD DR1, DR15, DR1
    000000F5 76902021                       DADD DR1, DR2, DR2
    000000F9 FC78F820                       DMOV.D DR2, [R15]

    …略…                                  …略…

    000001B1 75B80F                         DPOPM.D DR0-DR15
    000001B4 02                             RTS

     

                                     ;*** COMMAND PARAMETER ***

                                     ;-isa=rxv3
                                     ;-fpu
                                     ;-dpfpu
                                     ;-save_acc

                                     …略(-MAKEUDと-include)…

                                     ;-asmopt=-bank
                                     ;-lang=c99
                                     ;-utf8
                                     ;-message
                                     ;-output=obj
                                     ;-obj_path=src
                                     ;-debug
                                     ;-outcode=utf8
                                     ;-show=source
                                     ;-optimize=max
                                     ;-goptimize
                                     ;-speed
                                     ;-type_size_access_to_volatile
                                     ;-nologo
                                     ;-listfile=src/RXv3_Check_FSQRT_DSQRT_etc.lst
                                     ;../src/RXv3_Check_FSQRT_DSQRT_etc.c

     
    ICCRXでのリストファイル

       \                                 In section .text, align 1, keep-with-next
       \                     _Check_DPUSHM_DPOPM:
       \   000000 FB 1E        MOV.L     #_f1:24,R1
       \          ..'....
       \   000005 75 B0 0F     DPUSHM.D  DR0,DR15
       \   000008 FC C9 18 04  DMOV.D    0x10[R1],DR2
       \          20
       \   00000D FC C9 18 02  DMOV.D    0x8[R1],DR0
       \          00
       \   000012 F9 03 43 00  DMOV.D    #0x40080000,DRH4
       \          00 08 40
       \   000019 F9 03 53 00  DMOV.D    #0x40100000,DRH5
       \          00 10 40
       \   000020 76 90 20 30  DADD      DR0,DR2,DR3
       \   000024 76 90 01 22  DSUB      DR2,DR0,DR2
       \   000028 76 90 40 43  DADD      DR3,DR4,DR4
       \   00002C 76 90 50 52  DADD      DR2,DR5,DR5
       \   000030 F9 03 63 00  DMOV.D    #0x40140000,DRH6
       \          00 14 40
       \   000037 F9 03 73 00  DMOV.D    #0x40180000,DRH7
       \          00 18 40
       \   00003E F9 03 93 00  DMOV.D    #0x40200000,DRH9
       \          00 20 40
       \   000045 F9 03 B3 00  DMOV.D    #0x40240000,DRH11
       \          00 24 40
       \   00004C F9 03 D3 00  DMOV.D    #0x40280000,DRH13
       \          00 28 40
       \   000053 F9 03 F3 00  DMOV.D    #0x402c0000,DRH15
       \          00 2C 40
       \   00005A F9 03 03 00  DMOV.D    #0x40300000,DRH0
       \          00 30 40
       \   000061 76 90 60 63  DADD      DR3,DR6,DR6
       \   000065 76 90 70 72  DADD      DR2,DR7,DR7
       \   000069 76 90 90 92  DADD      DR2,DR9,DR9
       \   00006D 76 90 B0 B2  DADD      DR2,DR11,DR11
       \   000071 76 90 D0 D2  DADD      DR2,DR13,DR13
       \   000075 76 90 F0 F2  DADD      DR2,DR15,DR15
       \   000079 76 90 00 22  DADD      DR2,DR0,DR2
       \   00007D 76 90 50 04  DADD      DR4,DR5,DR0
       \   000081 F9 03 83 00  DMOV.D    #0x401c0000,DRH8
       \          00 1C 40
       \   000088 76 90 60 00  DADD      DR0,DR6,DR0
       \   00008C 76 90 80 83  DADD      DR3,DR8,DR8
       \   000090 76 90 70 00  DADD      DR0,DR7,DR0
       \   000094 F9 03 A3 00  DMOV.D    #0x40220000,DRH10
       \          00 22 40
       \   00009B 76 90 80 00  DADD      DR0,DR8,DR0
       \   00009F 76 90 A0 A3  DADD      DR3,DR10,DR10
       \   0000A3 76 90 90 00  DADD      DR0,DR9,DR0
       \   0000A7 F9 03 C3 00  DMOV.D    #0x40260000,DRH12
       \          00 26 40
       \   0000AE 76 90 A0 00  DADD      DR0,DR10,DR0
       \   0000B2 76 90 C0 C3  DADD      DR3,DR12,DR12
       \   0000B6 76 90 B0 00  DADD      DR0,DR11,DR0
       \   0000BA F9 03 E3 00  DMOV.D    #0x402a0000,DRH14
       \          00 2A 40
       \   0000C1 76 90 C0 00  DADD      DR0,DR12,DR0
       \   0000C5 76 90 E0 E3  DADD      DR3,DR14,DR14
       \   0000C9 76 90 D0 00  DADD      DR0,DR13,DR0
       \   0000CD F9 03 13 00  DMOV.D    #0x402e0000,DRH1
       \          00 2E 40
       \   0000D4 76 90 E0 00  DADD      DR0,DR14,DR0
       \   0000D8 76 90 10 33  DADD      DR3,DR1,DR3
       \   0000DC 76 90 F0 00  DADD      DR0,DR15,DR0
       \   0000E0 76 90 30 00  DADD      DR0,DR3,DR0
       \   0000E4 76 90 20 00  DADD      DR0,DR2,DR0
       \   0000E8 FC 79 18 06  DMOV.D    DR0,0x18[R1]
       \          00

           …略…

       \   000198 75 B8 0F     DPOPM.D   DR0,DR15
       \   00019B 02           RTS

     

    #    Command line      =
    #        ..\src\RXv3_Check_FSQRT_DSQRT_etc.c -o
    #        src\RXv3_Check_FSQRT_DSQRT_etc.o --no_wrap_diagnostics
    #        --require_prototypes -e --align_func=1 --tfu=none -Ohs
    #        --no_size_constraints --no_cross_call --debug -lC ./

             …略(-I)…

    #        --remarks --source_encoding utf8 --utf8_text_in --text_out utf8
    #        --save_acc --endian l --core rxv3 --fpu=*** --data_model=f --double=***
    #        --int=32 --dlib_config C:/Renesas/EWB/8.4/rx/LIB/dlrxdlln.h

     
    GNURXでのリストファイル

       4                                .section    .text.Check_DPUSHM_DPOPM,"ax",@progbits
       6                                _Check_DPUSHM_DPOPM:
      10 0000 75 B0 0F                      dpushm.d    dr0-dr15
      15 0003 FB 52 00 00 00 00             mov.L   #_d1, r5
      16 0009 FC C8 58 50                   dmov.D  [r5], dr5
      17 000d FB 52 00 00 00 00             mov.L   #_d2, r5
      18 0013 FC C8 58 00                   dmov.D  [r5], dr0
      20 0017 76 90 51 30                   dsub    dr0, dr5, dr3
      22 001b 76 90 00 55                   dadd    dr5, dr0, dr5
      24 001f F9 03 13 00 00 08 40          dmov.D  #0x40080000, drh1
      25 0026 76 90 10 15                   dadd    dr5, dr1, dr1
      29 002a F9 03 63 00 00 10 40          dmov.D  #0x40100000, drh6
      30 0031 76 90 60 63                   dadd    dr3, dr6, dr6
      34 0035 F9 03 F3 00 00 14 40          dmov.D  #0x40140000, drh15
      35 003c 76 90 F0 F5                   dadd    dr5, dr15, dr15
      39 0040 76 90 62 41                   dmul    dr1, dr6, dr4
      41 0044 76 90 11 06                   dsub    dr6, dr1, dr0
      43 0048 F9 03 E3 00 00 18 40          dmov.D  #0x40180000, drh14
      44 004f 76 90 E0 E3                   dadd    dr3, dr14, dr14
      48 0053 76 90 F2 44                   dmul    dr4, dr15, dr4
      50 0057 76 90 01 0F                   dsub    dr15, dr0, dr0

      …略…

     135 0103 F9 03 F3 00 00 2E 40          dmov.D  #0x402e0000, drh15
     138 010a 76 90 F0 55                   dadd    dr5, dr15, dr5
     142 010e 76 90 62 44                   dmul    dr4, dr6, dr4
     144 0112 76 90 01 06                   dsub    dr6, dr0, dr0
     146 0116 76 90 25 2E                   ddiv    dr14, dr2, dr2
     148 011a 76 90 E0 11                   dadd    dr1, dr14, dr1
     150 011e F9 03 E3 00 00 30 40          dmov.D  #0x40300000, drh14
     153 0125 76 90 E0 33                   dadd    dr3, dr14, dr3
     157 0129 76 90 52 44                   dmul    dr4, dr5, dr4
     159 012d 76 90 01 05                   dsub    dr5, dr0, dr0
     161 0131 76 90 25 2D                   ddiv    dr13, dr2, dr2
     163 0135 76 90 D0 11                   dadd    dr1, dr13, dr1
     165 0139 76 90 32 44                   dmul    dr4, dr3, dr4
     167 013d 76 90 01 03                   dsub    dr3, dr0, dr0
     169 0141 76 90 C0 11                   dadd    dr1, dr12, dr1
     171 0145 76 90 25 2C                   ddiv    dr12, dr2, dr2
     173 0149 76 90 25 2B                   ddiv    dr11, dr2, dr2
     175 014d 76 90 B0 11                   dadd    dr1, dr11, dr1
     177 0151 76 90 A0 11                   dadd    dr1, dr10, dr1
     179 0155 76 90 25 2A                   ddiv    dr10, dr2, dr2
     181 0159 76 90 90 11                   dadd    dr1, dr9, dr1
     183 015d 76 90 25 29                   ddiv    dr9, dr2, dr2
     185 0161 76 90 80 11                   dadd    dr1, dr8, dr1
     187 0165 76 90 25 28                   ddiv    dr8, dr2, dr2
     189 0169 76 90 70 11                   dadd    dr1, dr7, dr1
     191 016d 76 90 25 27                   ddiv    dr7, dr2, dr2
     193 0171 76 90 60 11                   dadd    dr1, dr6, dr1
     195 0175 76 90 25 26                   ddiv    dr6, dr2, dr2
     197 0179 76 90 50 11                   dadd    dr1, dr5, dr1
     199 017d 76 90 25 25                   ddiv    dr5, dr2, dr2
     201 0181 76 90 30 11                   dadd    dr1, dr3, dr1
     203 0185 76 90 25 23                   ddiv    dr3, dr2, dr2
     205 0189 FB 52 00 00 00 00             mov.L   #_dA, r5
     208 018f FC 78 58 10                   dmov.D  dr1, [r5]
     211 0193 FB 52 00 00 00 00             mov.L   #_dB, r5
     212 0199 FC 78 58 40                   dmov.D  dr4, [r5]
     215 019d FB 52 00 00 00 00             mov.L   #_dC, r5
     216 01a3 FC 78 58 00                   dmov.D  dr0, [r5]
     219 01a7 FB 52 00 00 00 00             mov.L   #_dD, r5
     220 01ad FC 78 58 20                   dmov.D  dr2, [r5]
     222 01b1 75 B8 0F                      dpopm.d dr0-dr15
     225 01b4 02                            rts

     

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

    > DPUSHM命令(レジスタ数が多い場合(最大16レジスタ)) : 最大 16 クロック
    > DPOPM命令(レジスタ数が多い場合(最大16レジスタ))  : 最大 16 or 16+1 クロック

    コンパイラは生成コード内で以下のような命令を素朴に使用していますね。CC-RXでも特殊な対応(例えば複数命令に分割するような機能とか)は無いようでした。1つ前の投稿で書いたことの繰り返しですけれども、CC-RXの -nouse_div_inst というコンパイルオプションで抑止される命令のうち、DIV命令やDIVU命令と同等レベルとはちょっと言い難いとしても、FDIV命令と同等レベルの命令実行時間とは言えるだろうと思います。(他の多くの命令と比べて、有意に実行時間が長く、長くなっている分だけ割り込みルーチンへ飛ぶのが遅れる。)

    DPUSHM.D DR0-DR15
    DPOPM.D DR0-DR15

     
    試したソース

    double d1, d2;
    double dA, dB, dC, dD;
    static void Check_DPUSHM_DPOPM(void);
    static void Check_DPUSHM_DPOPM(void)
    {
        double d3, d4, d5, d6, d7, d8, d9, d10, d11, d12, d13, d14, d15, d16;

        d3  = d1 + d2 +  3.0;
        d4  = d1 - d2 +  4.0;
        d5  = d1 + d2 +  5.0;
        d6  = d1 - d2 +  6.0;
        d7  = d1 + d2 +  7.0;
        d8  = d1 - d2 +  8.0;
        d9  = d1 + d2 +  9.0;
        d10 = d1 - d2 + 10.0;
        d11 = d1 + d2 + 11.0;
        d12 = d1 - d2 + 12.0;
        d13 = d1 + d2 + 13.0;
        d14 = d1 - d2 + 14.0;
        d15 = d1 + d2 + 15.0;
        d16 = d1 - d2 + 16.0;

        dA = d3 + d4 + d5 + d6 + d7 + d8 + d9 + d10 + d11 + d12 + d13 + d14 + d15 + d16;
        dB = d3 * d4 * d5 * d6 * d7 * d8 * d9 * d10 * d11 * d12 * d13 * d14 * d15 * d16;
        dC = d3 - d4 - d5 - d6 - d7 - d8 - d9 - d10 - d11 - d12 - d13 - d14 - d15 - d16;
        dD = d3 / d4 / d5 / d6 / d7 / d8 / d9 / d10 / d11 / d12 / d13 / d14 / d15 / d16;
    }

     
    CC-RXでのリストファイル

                                            .SECTION    P,CODE
    00000000                         __$Check_DPUSHM_DPOPM:
                                            .STACK  __$Check_DPUSHM_DPOPM=132
    00000000 75B00F                         DPUSHM.D DR0-DR15
    00000003 FBE2rrrrrrrr                   MOV.L #_d1, R14
    00000009 FCC8E830                       DMOV.D [R14], DR3
    0000000D FBE2rrrrrrrr                   MOV.L #_d2, R14
    00000013 FCC8E810                       DMOV.D [R14], DR1
    00000017 76903021                       DADD DR1, DR3, DR2
    0000001B 769031F1                       DSUB DR1, DR3, DR15
    0000001F F9030300000840                 DMOV.D #40080000H, DRH0
    00000026 F9031300001040                 DMOV.D #40100000H, DRH1
    0000002D 76902000                       DADD DR0, DR2, DR0
    00000031 7690F0E1                       DADD DR1, DR15, DR14
    00000035 F9031300001440                 DMOV.D #40140000H, DRH1
    0000003C 769020D1                       DADD DR1, DR2, DR13
    00000040 F9031300001840                 DMOV.D #40180000H, DRH1
    00000047 7690003E                       DADD DR14, DR0, DR3
    0000004B 7690F0C1                       DADD DR1, DR15, DR12
    0000004F F9031300001C40                 DMOV.D #401C0000H, DRH1
    00000056 769020B1                       DADD DR1, DR2, DR11
    0000005A FBF2rrrrrrrr                   MOV.L #_dA, R15
    00000060 7690303D                       DADD DR13, DR3, DR3
    00000064 F9031300002040                 DMOV.D #40200000H, DRH1
    0000006B 7690F0A1                       DADD DR1, DR15, DR10
    0000006F F9031300002240                 DMOV.D #40220000H, DRH1
    00000076 7690303C                       DADD DR12, DR3, DR3
    0000007A 76902091                       DADD DR1, DR2, DR9
    0000007E F9031300002440                 DMOV.D #40240000H, DRH1
    00000085 7690F081                       DADD DR1, DR15, DR8
    00000089 7690303B                       DADD DR11, DR3, DR3
    0000008D F9031300002640                 DMOV.D #40260000H, DRH1
    00000094 76902071                       DADD DR1, DR2, DR7
    00000098 F9031300002840                 DMOV.D #40280000H, DRH1
    0000009F 7690303A                       DADD DR10, DR3, DR3
    000000A3 7690F061                       DADD DR1, DR15, DR6
    000000A7 FBE2rrrrrrrr                   MOV.L #_dB, R14
    000000AD F9031300002A40                 DMOV.D #402A0000H, DRH1
    000000B4 76902051                       DADD DR1, DR2, DR5
    000000B8 76903039                       DADD DR9, DR3, DR3
    000000BC F9031300002C40                 DMOV.D #402C0000H, DRH1
    000000C3 7690F041                       DADD DR1, DR15, DR4
    000000C7 76903038                       DADD DR8, DR3, DR3
    000000CB 76903037                       DADD DR7, DR3, DR3
    000000CF 76903036                       DADD DR6, DR3, DR3
    000000D3 76903035                       DADD DR5, DR3, DR3
    000000D7 76903014                       DADD DR4, DR3, DR1
    000000DB F9033300002E40                 DMOV.D #402E0000H, DRH3
    000000E2 76902033                       DADD DR3, DR2, DR3
    000000E6 76901023                       DADD DR3, DR1, DR2
    000000EA F9031300003040                 DMOV.D #40300000H, DRH1
    000000F1 7690F011                       DADD DR1, DR15, DR1
    000000F5 76902021                       DADD DR1, DR2, DR2
    000000F9 FC78F820                       DMOV.D DR2, [R15]

    …略…                                  …略…

    000001B1 75B80F                         DPOPM.D DR0-DR15
    000001B4 02                             RTS

     

                                     ;*** COMMAND PARAMETER ***

                                     ;-isa=rxv3
                                     ;-fpu
                                     ;-dpfpu
                                     ;-save_acc

                                     …略(-MAKEUDと-include)…

                                     ;-asmopt=-bank
                                     ;-lang=c99
                                     ;-utf8
                                     ;-message
                                     ;-output=obj
                                     ;-obj_path=src
                                     ;-debug
                                     ;-outcode=utf8
                                     ;-show=source
                                     ;-optimize=max
                                     ;-goptimize
                                     ;-speed
                                     ;-type_size_access_to_volatile
                                     ;-nologo
                                     ;-listfile=src/RXv3_Check_FSQRT_DSQRT_etc.lst
                                     ;../src/RXv3_Check_FSQRT_DSQRT_etc.c

     
    ICCRXでのリストファイル

       \                                 In section .text, align 1, keep-with-next
       \                     _Check_DPUSHM_DPOPM:
       \   000000 FB 1E        MOV.L     #_f1:24,R1
       \          ..'....
       \   000005 75 B0 0F     DPUSHM.D  DR0,DR15
       \   000008 FC C9 18 04  DMOV.D    0x10[R1],DR2
       \          20
       \   00000D FC C9 18 02  DMOV.D    0x8[R1],DR0
       \          00
       \   000012 F9 03 43 00  DMOV.D    #0x40080000,DRH4
       \          00 08 40
       \   000019 F9 03 53 00  DMOV.D    #0x40100000,DRH5
       \          00 10 40
       \   000020 76 90 20 30  DADD      DR0,DR2,DR3
       \   000024 76 90 01 22  DSUB      DR2,DR0,DR2
       \   000028 76 90 40 43  DADD      DR3,DR4,DR4
       \   00002C 76 90 50 52  DADD      DR2,DR5,DR5
       \   000030 F9 03 63 00  DMOV.D    #0x40140000,DRH6
       \          00 14 40
       \   000037 F9 03 73 00  DMOV.D    #0x40180000,DRH7
       \          00 18 40
       \   00003E F9 03 93 00  DMOV.D    #0x40200000,DRH9
       \          00 20 40
       \   000045 F9 03 B3 00  DMOV.D    #0x40240000,DRH11
       \          00 24 40
       \   00004C F9 03 D3 00  DMOV.D    #0x40280000,DRH13
       \          00 28 40
       \   000053 F9 03 F3 00  DMOV.D    #0x402c0000,DRH15
       \          00 2C 40
       \   00005A F9 03 03 00  DMOV.D    #0x40300000,DRH0
       \          00 30 40
       \   000061 76 90 60 63  DADD      DR3,DR6,DR6
       \   000065 76 90 70 72  DADD      DR2,DR7,DR7
       \   000069 76 90 90 92  DADD      DR2,DR9,DR9
       \   00006D 76 90 B0 B2  DADD      DR2,DR11,DR11
       \   000071 76 90 D0 D2  DADD      DR2,DR13,DR13
       \   000075 76 90 F0 F2  DADD      DR2,DR15,DR15
       \   000079 76 90 00 22  DADD      DR2,DR0,DR2
       \   00007D 76 90 50 04  DADD      DR4,DR5,DR0
       \   000081 F9 03 83 00  DMOV.D    #0x401c0000,DRH8
       \          00 1C 40
       \   000088 76 90 60 00  DADD      DR0,DR6,DR0
       \   00008C 76 90 80 83  DADD      DR3,DR8,DR8
       \   000090 76 90 70 00  DADD      DR0,DR7,DR0
       \   000094 F9 03 A3 00  DMOV.D    #0x40220000,DRH10
       \          00 22 40
       \   00009B 76 90 80 00  DADD      DR0,DR8,DR0
       \   00009F 76 90 A0 A3  DADD      DR3,DR10,DR10
       \   0000A3 76 90 90 00  DADD      DR0,DR9,DR0
       \   0000A7 F9 03 C3 00  DMOV.D    #0x40260000,DRH12
       \          00 26 40
       \   0000AE 76 90 A0 00  DADD      DR0,DR10,DR0
       \   0000B2 76 90 C0 C3  DADD      DR3,DR12,DR12
       \   0000B6 76 90 B0 00  DADD      DR0,DR11,DR0
       \   0000BA F9 03 E3 00  DMOV.D    #0x402a0000,DRH14
       \          00 2A 40
       \   0000C1 76 90 C0 00  DADD      DR0,DR12,DR0
       \   0000C5 76 90 E0 E3  DADD      DR3,DR14,DR14
       \   0000C9 76 90 D0 00  DADD      DR0,DR13,DR0
       \   0000CD F9 03 13 00  DMOV.D    #0x402e0000,DRH1
       \          00 2E 40
       \   0000D4 76 90 E0 00  DADD      DR0,DR14,DR0
       \   0000D8 76 90 10 33  DADD      DR3,DR1,DR3
       \   0000DC 76 90 F0 00  DADD      DR0,DR15,DR0
       \   0000E0 76 90 30 00  DADD      DR0,DR3,DR0
       \   0000E4 76 90 20 00  DADD      DR0,DR2,DR0
       \   0000E8 FC 79 18 06  DMOV.D    DR0,0x18[R1]
       \          00

           …略…

       \   000198 75 B8 0F     DPOPM.D   DR0,DR15
       \   00019B 02           RTS

     

    #    Command line      =
    #        ..\src\RXv3_Check_FSQRT_DSQRT_etc.c -o
    #        src\RXv3_Check_FSQRT_DSQRT_etc.o --no_wrap_diagnostics
    #        --require_prototypes -e --align_func=1 --tfu=none -Ohs
    #        --no_size_constraints --no_cross_call --debug -lC ./

             …略(-I)…

    #        --remarks --source_encoding utf8 --utf8_text_in --text_out utf8
    #        --save_acc --endian l --core rxv3 --fpu=*** --data_model=f --double=***
    #        --int=32 --dlib_config C:/Renesas/EWB/8.4/rx/LIB/dlrxdlln.h

     
    GNURXでのリストファイル

       4                                .section    .text.Check_DPUSHM_DPOPM,"ax",@progbits
       6                                _Check_DPUSHM_DPOPM:
      10 0000 75 B0 0F                      dpushm.d    dr0-dr15
      15 0003 FB 52 00 00 00 00             mov.L   #_d1, r5
      16 0009 FC C8 58 50                   dmov.D  [r5], dr5
      17 000d FB 52 00 00 00 00             mov.L   #_d2, r5
      18 0013 FC C8 58 00                   dmov.D  [r5], dr0
      20 0017 76 90 51 30                   dsub    dr0, dr5, dr3
      22 001b 76 90 00 55                   dadd    dr5, dr0, dr5
      24 001f F9 03 13 00 00 08 40          dmov.D  #0x40080000, drh1
      25 0026 76 90 10 15                   dadd    dr5, dr1, dr1
      29 002a F9 03 63 00 00 10 40          dmov.D  #0x40100000, drh6
      30 0031 76 90 60 63                   dadd    dr3, dr6, dr6
      34 0035 F9 03 F3 00 00 14 40          dmov.D  #0x40140000, drh15
      35 003c 76 90 F0 F5                   dadd    dr5, dr15, dr15
      39 0040 76 90 62 41                   dmul    dr1, dr6, dr4
      41 0044 76 90 11 06                   dsub    dr6, dr1, dr0
      43 0048 F9 03 E3 00 00 18 40          dmov.D  #0x40180000, drh14
      44 004f 76 90 E0 E3                   dadd    dr3, dr14, dr14
      48 0053 76 90 F2 44                   dmul    dr4, dr15, dr4
      50 0057 76 90 01 0F                   dsub    dr15, dr0, dr0

      …略…

     135 0103 F9 03 F3 00 00 2E 40          dmov.D  #0x402e0000, drh15
     138 010a 76 90 F0 55                   dadd    dr5, dr15, dr5
     142 010e 76 90 62 44                   dmul    dr4, dr6, dr4
     144 0112 76 90 01 06                   dsub    dr6, dr0, dr0
     146 0116 76 90 25 2E                   ddiv    dr14, dr2, dr2
     148 011a 76 90 E0 11                   dadd    dr1, dr14, dr1
     150 011e F9 03 E3 00 00 30 40          dmov.D  #0x40300000, drh14
     153 0125 76 90 E0 33                   dadd    dr3, dr14, dr3
     157 0129 76 90 52 44                   dmul    dr4, dr5, dr4
     159 012d 76 90 01 05                   dsub    dr5, dr0, dr0
     161 0131 76 90 25 2D                   ddiv    dr13, dr2, dr2
     163 0135 76 90 D0 11                   dadd    dr1, dr13, dr1
     165 0139 76 90 32 44                   dmul    dr4, dr3, dr4
     167 013d 76 90 01 03                   dsub    dr3, dr0, dr0
     169 0141 76 90 C0 11                   dadd    dr1, dr12, dr1
     171 0145 76 90 25 2C                   ddiv    dr12, dr2, dr2
     173 0149 76 90 25 2B                   ddiv    dr11, dr2, dr2
     175 014d 76 90 B0 11                   dadd    dr1, dr11, dr1
     177 0151 76 90 A0 11                   dadd    dr1, dr10, dr1
     179 0155 76 90 25 2A                   ddiv    dr10, dr2, dr2
     181 0159 76 90 90 11                   dadd    dr1, dr9, dr1
     183 015d 76 90 25 29                   ddiv    dr9, dr2, dr2
     185 0161 76 90 80 11                   dadd    dr1, dr8, dr1
     187 0165 76 90 25 28                   ddiv    dr8, dr2, dr2
     189 0169 76 90 70 11                   dadd    dr1, dr7, dr1
     191 016d 76 90 25 27                   ddiv    dr7, dr2, dr2
     193 0171 76 90 60 11                   dadd    dr1, dr6, dr1
     195 0175 76 90 25 26                   ddiv    dr6, dr2, dr2
     197 0179 76 90 50 11                   dadd    dr1, dr5, dr1
     199 017d 76 90 25 25                   ddiv    dr5, dr2, dr2
     201 0181 76 90 30 11                   dadd    dr1, dr3, dr1
     203 0185 76 90 25 23                   ddiv    dr3, dr2, dr2
     205 0189 FB 52 00 00 00 00             mov.L   #_dA, r5
     208 018f FC 78 58 10                   dmov.D  dr1, [r5]
     211 0193 FB 52 00 00 00 00             mov.L   #_dB, r5
     212 0199 FC 78 58 40                   dmov.D  dr4, [r5]
     215 019d FB 52 00 00 00 00             mov.L   #_dC, r5
     216 01a3 FC 78 58 00                   dmov.D  dr0, [r5]
     219 01a7 FB 52 00 00 00 00             mov.L   #_dD, r5
     220 01ad FC 78 58 20                   dmov.D  dr2, [r5]
     222 01b1 75 B8 0F                      dpopm.d dr0-dr15
     225 01b4 02                            rts

     

Children
No Data