*参照元 [#sd26bcc0]
#backlinks

*説明 [#c9f29ed3]
-パス: [[gcc-8.3/gcc/final.c]]

-FIXME: これは何?
--説明


**引数 [#gd829251]
-rtx *xp
--
--[[gcc-8.3/gcc/rtx]]
-bool final_p
--


**返り値 [#b7fb1130]
-rtx
--
--[[gcc-8.3/gcc/rtx]]


**参考 [#n2c56869]


*実装 [#z8c4605f]
 /* If X is a SUBREG, try to replace it with a REG or a MEM, based on
    the thing it is a subreg of.  Do it anyway if FINAL_P.  */
 
 rtx
 alter_subreg (rtx *xp, bool final_p)
 {
   rtx x = *xp;
   rtx y = SUBREG_REG (x);
 
-
--[[gcc-8.3/gcc/rtx]]
--[[gcc-8.3/gcc/SUBREG_REG()]]

   /* simplify_subreg does not remove subreg from volatile references.
      We are required to.  */
   if (MEM_P (y))
     {
       poly_int64 offset = SUBREG_BYTE (x);
 
       /* For paradoxical subregs on big-endian machines, SUBREG_BYTE
 	 contains 0 instead of the proper offset.  See simplify_subreg.  */
       if (paradoxical_subreg_p (x))
 	offset = byte_lowpart_offset (GET_MODE (x), GET_MODE (y));
 
       if (final_p)
 	*xp = adjust_address (y, GET_MODE (x), offset);
       else
 	*xp = adjust_address_nv (y, GET_MODE (x), offset);
     }
-
--[[gcc-8.3/gcc/MEM_P()]]
--[[gcc-8.3/gcc/poly_int64]]
--[[gcc-8.3/gcc/SUBREG_BYTE()]]
--[[gcc-8.3/gcc/paradoxical_subreg_p()]]
--[[gcc-8.3/gcc/byte_lowpart_offset()]]
--[[gcc-8.3/gcc/GET_MODE()]]
--[[gcc-8.3/gcc/adjust_address()]]
--[[gcc-8.3/gcc/adjust_address_nv()]]

   else if (REG_P (y) && HARD_REGISTER_P (y))
     {
       rtx new_rtx = simplify_subreg (GET_MODE (x), y, GET_MODE (y),
 				     SUBREG_BYTE (x));
 
       if (new_rtx != 0)
 	*xp = new_rtx;
       else if (final_p && REG_P (y))
 	{
 	  /* Simplify_subreg can't handle some REG cases, but we have to.  */
 	  unsigned int regno;
 	  poly_int64 offset;
 
 	  regno = subreg_regno (x);
 	  if (subreg_lowpart_p (x))
 	    offset = byte_lowpart_offset (GET_MODE (x), GET_MODE (y));
 	  else
 	    offset = SUBREG_BYTE (x);
 	  *xp = gen_rtx_REG_offset (y, GET_MODE (x), regno, offset);
 	}
     }
 
-
--[[gcc-8.3/gcc/REG_P()]]
--[[gcc-8.3/gcc/HARD_REGISTER_P()]]
--[[gcc-8.3/gcc/simplify_subreg()]]
--[[gcc-8.3/gcc/GET_MODE()]]
--[[gcc-8.3/gcc/SUBREG_BYTE()]]
--[[gcc-8.3/gcc/subreg_regno()]]
--[[gcc-8.3/gcc/subreg_lowpart_p()]]
--[[gcc-8.3/gcc/gen_rtx_REG_offset()]]

   return *xp;
 }


*コメント [#za427664]


トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS