%T originally allowed to move between registers and memory, using an anadorned operand for the piece that comes first in memory, and using %T for the second part. This does not work with the SH4 floating point registers for little endian code. The #ifdef __LITTLE_ENDIAN__ sequences in lib1funcs.asm:udivsi3_i4 are work around this defect, but these kinds of ifdefs do not scale well. The SHMEDIA truncdisi2 pattern really should use %R - it couldn't originally because of a bug in %R, but that's fixed now.
I intend to introduce a new modifier for the first part of a 64 bit value - I suppose %t is best suited for that - and change %T for little endian to be equivalent to %S.
This does not actually affect lib1funcs.asm, since we don't have access to gcc's output modifiers there anyway.
Created attachment 11218 [details] untested patch If this is not blocking the fix for some more serious bug, maybe we should wait with this till 4.2 has branched.
Since I am no longer an SH port maintainer this is no longer of immediate interest to me.