GNURX用のCCRXmachine.hとCCRXmachine.cというソースがe2 studioフォルダにありました(内容は概ね名前から予想される通りのものでした)

こんにちは。NoMaYです。

e2 studio v6.3.0がリリースされていたので、インストールして幾つかプロジェクトを作成して、いつものようにe2 studioのインストールフォルダを眺めていたら、CCRXmachine.hとCCRXmachine.cというファイルがあることに気付きました。中を見てみると、概ねファイル名から予想される通りのソースファイルでした。(今までのe2 studioのインストールフォルダを見直してみたところ、以前からあったことが分かりましたが、今まで気付きませんでした。) ただ、一部コメントアウトされているものがあったり、以前に別スレッド『GUNRX用プロジェクトのスマートコンフィグレータのBSPを見ていて気付いた変な移植コード』で話題にしたことと同じ元のコードの意図を理解していない書き換えがあったり、ちょっと惜しいような気もしました。

e2 studioインストールフォルダ\internal\projectgen\rx\Generate\CCRXConversion\inc\CCRXmachine.h



e2 studioインストールフォルダ\internal\projectgen\rx\Generate\CCRXConversion\inc\CCRXmachine.c



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

    どなたか、fujitaさんが気付かれた__builtin_rx_xchg(&mem, &mem);の命令列が-O2でコンパイルした時に壊れてしまう件について、GNURXの開発元のRedHat社(でしたよね) or サポートサイトのgcc-renesas.comに報告される人はいらっしゃいますか? これに気付いてしまったら放ったらかす訳にはいかない気がしますので、どなたもいらっしゃらなければ、私の方でgcc-renesas.comに報告しようかと思います。

    効率や仕様は脇へおいて、GNURXのGCCの__builtin_rx_xchg()関数のソースは間違っていなさそうなので、たぶん以下の画面コピーのフォルダのファイルのどこかに不具合があるのではないかと思います。

    rx_gcc4.8.4_2018q1\gcc\gcc\config\rx\


    ちなみに、以下はGNURXのリポジトリでは無くてGCCそのもののリポジトリですが、__builtin_rx_xchg()関数の実装は含まれていませんでした。きっと他にも色々と古いままなのだと思われます、、、

    [gcc.git] / gcc / config / rx /
    gcc.gnu.org/git/?p=gcc.git;a=tree;f=gcc/config/rx;hb=refs/heads/master

    constraints.md
    predicates.md
    rx-modes.def
    rx-opts.h
    rx-protos.h
    rx.c
    rx.h
    rx.md
    rx.opt
    t-rx

    開発費(勘で言って500万円/年ぐらいとか???)を出しているのはルネサスさん(ですよね)でしょうから、ルネサスさんから報告が行くのが一番確実に伝わるとは思われますが、、、

    [余談]

    GNURXのGCCのソースにGCCそのもののソースに無い以下のソースが含まれていることに気付いたのですが、これは何だろう、、、調べてみようかな、、、

    rx_gcc4.8.4_2018q1\gcc\gcc\config\rx\rx-pragma.c

    #include "config.h"
    #include "system.h"
    #include "coretypes.h"
    #include "tm.h"
    #include "tree.h"
    #include "c-family/c-pragma.h"
    #include "c-family/c-common.h"
    #include "diagnostic-core.h"
    #include "cpplib.h"
    #include "hard-reg-set.h"
    #include "output.h"
    #include "rx-protos.h"
    #include "function.h"
    #define MAX_RECOG_OPERANDS 10
    #include "reload.h"
    #include "target.h"

    /* Implements the "pragma ADDRESS" pragma.  This pragma takes a
     *    variable name and an address, and arranges for that variable to be
     *       "at" that address.  The variable is also made volatile.  */
    static void
    rx_pragma_address (cpp_reader * reader ATTRIBUTE_UNUSED)
    {
      /* on off */
      tree var, addr;
      enum cpp_ttype type;

      type = pragma_lex (&var);
      if (type == CPP_NAME)
        {
          type = pragma_lex (&addr);
          if (type == CPP_NUMBER)
            {
              if (var != error_mark_node)
                {
                  unsigned uaddr = tree_low_cst (addr, 1);
                  rx_note_pragma_address (IDENTIFIER_POINTER (var), uaddr);
                }

              type = pragma_lex (&var);
              if (type != CPP_EOF)
                {
                  error ("junk at end of #pragma ADDRESS");
                }
              return;
            }
        }
      error ("malformed #pragma ADDRESS variable address");
    }

    void
    rx_register_pragmas (void)
    {
      c_register_pragma (NULL, "ADDRESS", rx_pragma_address);
      c_register_pragma (NULL, "address", rx_pragma_address);
    }

     

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

    どなたか、fujitaさんが気付かれた__builtin_rx_xchg(&mem, &mem);の命令列が-O2でコンパイルした時に壊れてしまう件について、GNURXの開発元のRedHat社(でしたよね) or サポートサイトのgcc-renesas.comに報告される人はいらっしゃいますか? これに気付いてしまったら放ったらかす訳にはいかない気がしますので、どなたもいらっしゃらなければ、私の方でgcc-renesas.comに報告しようかと思います。

    効率や仕様は脇へおいて、GNURXのGCCの__builtin_rx_xchg()関数のソースは間違っていなさそうなので、たぶん以下の画面コピーのフォルダのファイルのどこかに不具合があるのではないかと思います。

    rx_gcc4.8.4_2018q1\gcc\gcc\config\rx\


    ちなみに、以下はGNURXのリポジトリでは無くてGCCそのもののリポジトリですが、__builtin_rx_xchg()関数の実装は含まれていませんでした。きっと他にも色々と古いままなのだと思われます、、、

    [gcc.git] / gcc / config / rx /
    gcc.gnu.org/git/?p=gcc.git;a=tree;f=gcc/config/rx;hb=refs/heads/master

    constraints.md
    predicates.md
    rx-modes.def
    rx-opts.h
    rx-protos.h
    rx.c
    rx.h
    rx.md
    rx.opt
    t-rx

    開発費(勘で言って500万円/年ぐらいとか???)を出しているのはルネサスさん(ですよね)でしょうから、ルネサスさんから報告が行くのが一番確実に伝わるとは思われますが、、、

    [余談]

    GNURXのGCCのソースにGCCそのもののソースに無い以下のソースが含まれていることに気付いたのですが、これは何だろう、、、調べてみようかな、、、

    rx_gcc4.8.4_2018q1\gcc\gcc\config\rx\rx-pragma.c

    #include "config.h"
    #include "system.h"
    #include "coretypes.h"
    #include "tm.h"
    #include "tree.h"
    #include "c-family/c-pragma.h"
    #include "c-family/c-common.h"
    #include "diagnostic-core.h"
    #include "cpplib.h"
    #include "hard-reg-set.h"
    #include "output.h"
    #include "rx-protos.h"
    #include "function.h"
    #define MAX_RECOG_OPERANDS 10
    #include "reload.h"
    #include "target.h"

    /* Implements the "pragma ADDRESS" pragma.  This pragma takes a
     *    variable name and an address, and arranges for that variable to be
     *       "at" that address.  The variable is also made volatile.  */
    static void
    rx_pragma_address (cpp_reader * reader ATTRIBUTE_UNUSED)
    {
      /* on off */
      tree var, addr;
      enum cpp_ttype type;

      type = pragma_lex (&var);
      if (type == CPP_NAME)
        {
          type = pragma_lex (&addr);
          if (type == CPP_NUMBER)
            {
              if (var != error_mark_node)
                {
                  unsigned uaddr = tree_low_cst (addr, 1);
                  rx_note_pragma_address (IDENTIFIER_POINTER (var), uaddr);
                }

              type = pragma_lex (&var);
              if (type != CPP_EOF)
                {
                  error ("junk at end of #pragma ADDRESS");
                }
              return;
            }
        }
      error ("malformed #pragma ADDRESS variable address");
    }

    void
    rx_register_pragmas (void)
    {
      c_register_pragma (NULL, "ADDRESS", rx_pragma_address);
      c_register_pragma (NULL, "address", rx_pragma_address);
    }

     

Children
  • NoMaYさん、fujitaさん

    シェルティです、こんにちは。

    ご協力感謝いたします。
    ご提示いただいたコードをルネサスからGCCの開発側に連絡、
    GCCの開発側から何らかのフィードバックを得たところまで確認しました。
    ご推察の通りの開発費の流れですので、NoMaYさんの手を煩わせるわけにはいかないと私は思っております。
    従いましてもう少し何らかの見解を出せるまでお時間いただければ、と思います。

    以上です