*参照元 [#j5d9b883] #backlinks *説明 [#q11b7060] -パス: [[gcc-8.3/gcc/rtl.h]] -FIXME: これは何? --N 番目のオペランド(u.fld[N])を返す。 --引数 N が範囲内に収まっているかチェックする --RTX の N 番目のオペランドの型が引数 C と一致するかチェックする **引数 [#h3b5cf17] -RTX -- --[[gcc-8.3/gcc/rtx]] -int N --何番目のオペランドを返すか -char C --オペランドが持つ値の型 **返り値 [#n3f3e89c] -rtunion --rtx の u.fld[] の型と同じ --[[gcc-8.3/gcc/rtunion]] **参考 [#r67c8a35] -N の範囲チェックをしない場合はこっち -オペランドではなく、rtx のコードチェックをするバージョンはこっち --[[gcc-8.3/gcc/RTL_CHECKC1()]] *実装 [#s06ff71c] #if defined ENABLE_RTL_CHECKING && (GCC_VERSION >= 2007) /* The bit with a star outside the statement expr and an & inside is so that N can be evaluated only once. */ #define RTL_CHECK1(RTX, N, C1) __extension__ \ (*({ __typeof (RTX) const _rtx = (RTX); const int _n = (N); \ const enum rtx_code _code = GET_CODE (_rtx); \ if (_n < 0 || _n >= GET_RTX_LENGTH (_code)) \ rtl_check_failed_bounds (_rtx, _n, __FILE__, __LINE__, \ __FUNCTION__); \ if (GET_RTX_FORMAT (_code)[_n] != C1) \ rtl_check_failed_type1 (_rtx, _n, C1, __FILE__, __LINE__, \ __FUNCTION__); \ &_rtx->u.fld[_n]; })) - --[[gcc-8.3/gcc/rtx_code]] --[[gcc-8.3/gcc/GET_CODE()]] --[[gcc-8.3/gcc/GET_RTX_LENGTH()]] --[[gcc-8.3/gcc/rtl_check_failed_bounds()]] --[[gcc-8.3/gcc/GET_RTX_FORMAT()]] --[[gcc-8.3/gcc/rtl_check_failed_type1()]] #else /* not ENABLE_RTL_CHECKING */ #define RTL_CHECK1(RTX, N, C1) ((RTX)->u.fld[N]) #endif *コメント [#bacd8c90]