https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102989

--- Comment #62 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
What the patch including incremental one currently does is:
1) small _BitInt (on x86-64 N <= 64) - the BITINT_TYPEs are kept as is in the
IL
   and expanded, they always have non-BLKmode (QI/HI/SI/DI) and are handled
like any
   other INTEGER_TYPEs (except preserved in calls to ensure correct ABI
passing)
2) middle _BitInt (on x86-64 N <= 128) - I keep in the IL just copy operations
and
   casts between them and INTEGER_TYPE (TImode in this case), actual
arithmetics is
   done on the INTEGER_TYPE
3) large _BitInt (on x86-64 that will be <= 255) - the intent was using
   BIT_FIELD_REFs/BIT_INSERT_EXPR to make the IL simple and perform stuff on
the
   up to 4 limbs in this case in straight line code
4) huge _BitInt (on x86-64 N > 255) use loops, VAR_DECL destination,
VCE+ARRAY_REF
   on the sources,
   dunno yet if I can get good code by making the VAR_DECL clobbered
immediately after
   I load a SSA_NAME from it (whether out of SSA/expansion could then extend
the
   lifetime of the VAR_DECL, or if I should have some pass do that, or the
bitint pass
   figure out the last use and put clobber only after that, or even replace the
SSA_NAME
   uses with accesses to VAR_DECL

Anyway, I think I'll work now on the add/sub with carry now and continue on
_BitInt only after that.

Reply via email to