*参照元 [#vda1b7b2] #backlinks *説明 [#a061f843] -パス: [[gcc-8.3/gcc/rtl.h]] -FIXME: これは何? --N 番目のオペランド(u.fld[N])を返す。 --引数 N が範囲内に収まっているかチェックする --RTX の N 番目のオペランドの型が引数 C1 または C2 と一致するかチェックする **引数 [#t6512b9e] -RTX -- --[[gcc-8.3/gcc/rtx]] -int N --何番目のオペランドを返すか -char C1 --オペランドの型 -char C2 --オペランドの型 **返り値 [#c6a6a003] -rtunion --rtx_def の u.fld[] の型と同じ --rtx の u.fld[] の型と同じ --[[gcc-8.3/gcc/rtunion]] --[[gcc-8.3/gcc/rtx_def]] **参考 [#cd0243af] *実装 [#kff6070f] #if defined ENABLE_RTL_CHECKING && (GCC_VERSION >= 2007) #define RTL_CHECK2(RTX, N, C1, C2) __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 \ && GET_RTX_FORMAT (_code)[_n] != C2) \ rtl_check_failed_type2 (_rtx, _n, C1, C2, __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_type2()]] #else /* not ENABLE_RTL_CHECKING */ #define RTL_CHECK2(RTX, N, C1, C2) ((RTX)->u.fld[N]) #endif *コメント [#rb023b87]