TImode for BITS_PER_WORD=32 targets

Andrew Stubbs ams@codesourcery.com
Fri Jul 24 15:37:01 GMT 2020


Hi all,

I want amdgcn to be able to support int128 types, partly because they 
might come up in code offloaded from x86_64 code, and partly because 
libgomp now requires at least some support (amdgcn builds have been 
failing since yesterday).

But, amdgcn has 32-bit registers, and therefore defines BITS_PER_WORD to 
32, which means that TImode doesn't Just Work, at least not for all 
operators. It already has TImode moves, for internal uses, so I can 
enable TImode and fix the libgomp build, but now libgfortran tries to 
use operators that don't exist, so I'm no better off.

The expand pass won't emit libgcc calls, like it does for DImode, and 
libgcc doesn't have the routines for it anyway. Neither does it support 
synthesized shifts or rotates for more than double-word types. 
(Multiple-word add and subtract appear to work fine, however.)

What would be the best (least effort) way to implement this?

I think I need shift, rotate, multiply, divide, and modulus, but there's 
probably more.

Thanks, any advise will be appreciated.

Andrew


More information about the Gcc mailing list