こんにちは。NoMaYです。別スレッドでRXv3コアのレジスタ一括退避機能の使い方を調べていて不審に思いました。バグ報告をしないと、、、ソース
double dbl;void i_fnc_4_2(void);void i_fnc_4_2(void){ if(dbl > 1.0) { dbl = 1.0; }}
リストファイルCC-RX : 倍精度浮動小数点比較結果レジスタ(DCMR)の退避/復帰あり
00000000 _i_fnc_4_2:00000000 75B001 DPUSHM.D DR0-DR100000003 75A010 DPUSHM.L DCMR-DCMR00000006 FBE2rrrrrrrr MOV.L #_dbl, R140000000C F903030000F03F DMOV.D #3FF00000H, DRH000000013 FCC8E810 DMOV.D [R14], DR100000017 76900841 DCMPLT DR1, DR00000001B 75901B MVFDR0000001E 21rr BNE L1200000020 L11: ; if_then_bb00000020 F8E600 MOV.L #00000000H, [R14]00000023 F9E2010000F03F MOV.L #3FF00000H, 04H[R14]0000002A L12: ; return0000002A 75A810 DPOPM.L DCMR-DCMR0000002D 75B801 DPOPM.D DR0-DR100000030 02 RTS
ICCRX : 倍精度浮動小数点比較結果レジスタ(DCMR)の退避/復帰あり
\ _i_fnc_4_2: \ 000000 75 B0 01 DPUSHM.D DR0,DR1 ; N \ 000003 FB 1E MOV.L #_dbl:24,R1 ; N \ ..'.... \ 000008 75 A0 10 DPUSHM.L DCMR,DCMR ; N \ 00000B FC C8 18 00 DMOV.D [R1],DR0 ; N \ 00000F F9 03 10 01 DMOV.L #0x1,DRL1 ; N \ 00 00 00 \ 000016 F9 03 12 00 DMOV.L #0x3ff00000,DRH1 ; N \ 00 F0 3F \ 00001D 76 90 18 60 DCMPLE DR0,DR1 ; N \ 000021 75 90 1B MVFDR \ 000024 21 0C BNE.B ??i_fnc_4_2_0 ; N \ 000026 F8 16 00 MOV.L #0x0,[R1] ; N \ 000029 F9 12 01 00 MOV.L #0x3ff00000,0x4[R1] ; N \ 00 F0 3F \ ??i_fnc_4_2_0: \ 000030 75 A8 10 DPOPM.L DCMR,DCMR ; N \ 000033 75 B8 01 DPOPM.D DR0,DR1 ; N \ 000036 02 RTS
GNURX : 倍精度浮動小数点比較結果レジスタ(DCMR)の退避/復帰なし (最適化レベルは-O3としました)
7 _i_fnc_4_2: 11 0000 75 B0 01 dpushm.d dr0-dr1 15 0003 F9 03 03 00 00 F0 3F dmov.D #0x3ff00000, drh0 17 000a FB 52 00 00 00 00 mov.L #_dbl, r5 19 0010 FC C8 58 10 dmov.D [r5], dr1 20 0014 76 90 18 60 dcmple dr0, dr1 21 0018 75 90 1B mvfdr 22 001b 15 bz .L1 25 001c FC 78 58 00 dmov.D dr0, [r5] 26 .balign 8,3,1 27 .L1: 29 0020 75 B8 01 dpopm.d dr0-dr1 30 0023 02 rts
[追記]e2 studio 2022-07のプロジェクトのファイル一式を以下のzipファイルに固めました。issue_RXv3_DPFPU_DCMR_push_pop_20221004.zip
こんにちは。NoMaYです。バグ報告をllvm-gcc-renesas.comのGNURXフォーラムに投稿したところ、将来のリリースで修正します、とのリプライがありました。
NoMaYさん
シェルティです、こんにちは。
ご連絡、解析ありがとうございます。こちらではRXv3コアのレジスタ一括退避機能をFreeRTOSカーネルで使ってみてどうなるかの検証を進めています。過去にNoMaYさんに実施いただいたプルリクエストなどを活用して、AWS本家と調整してみようと考えています。
なお、「RXv3コアのレジスタ一括退避機能」そのものや「多重割込み」の是非についても考え方をまとめてみたいなと考えています。個人的にはNoMaYさんと似た感じの考えでいます。
以上です