PATCH: PR target/35657: TDmode isn't aligned at 128bit when passing to a function

H.J. Lu hjl.tools@gmail.com
Thu Mar 27 19:31:00 GMT 2008


On Thu, Mar 27, 2008 at 9:47 AM, H.J. Lu <hjl.tools@gmail.com> wrote:
>
> On Thu, Mar 27, 2008 at 7:02 AM, Uros Bizjak <ubizjak@gmail.com> wrote:
>  >
>  > On Thu, Mar 27, 2008 at 2:33 PM, H.J. Lu <hjl.tools@gmail.com> wrote:
>  >
>  >  >  Decimal floating point isn't covered by the ia32 psABI. Gcc is the
>  >  >  first compiler
>  >  >  which implements DFP on ia32 and is defining the de facto DFP psABI. I don't
>  >  >  see a reason not to align them to their natural boundary when passing them
>  >  >  on stack. I'd like to install it on trunk and 4.3.1.
>  >
>  >  I assume that DFP passing will be specified in the next revision of psABI.
>  >
>  >  The patch is OK for mainline, but please revert runtime part of my
>  >  previous patch [1][2] that forced unaligned moves when TDmode (TImode)
>  >  values were moved to/from the stack. There is no need for this
>  >  functionality, once TDmode values are aligned to their natural
>  >  boundaries.
>  >
>  >  Also, please re-test your change (with my patch reverted) with
>  >  "--with-arch=core2" configured compiler, to check if problems [3]
>  >  resurfaced.
>  >
>  >  Regarding 4.3.1 support - since this is an ABI change w.r.t released
>  >  compiler, RMs should have their last word. IMO, at least a notice in
>  >  release notes is needed
>  >
>  >  Thanks,
>  >  Uros.
>  >
>  >  [1] http://gcc.gnu.org/ml/gcc-patches/2007-05/msg01716.html
>  >  [2] http://gcc.gnu.org/ml/gcc-patches/2007-05/msg01863.html
>  >  [3] http://gcc.gnu.org/ml/gcc-testresults/2007-05/msg01171.html
>  >
>
>  Hi,
>
>  I am testing this patch to revert TDmode unaligned memory check.
>  I applied it to trunk without my DFP alignment patch and configure gcc
>  with --with-arch=core2. I should get some DFP failures in 32bit. I will
>  then add my patch and re-run "make check". If all DFP failures are
>  gone, I will apply 2 patches to trunk first.
>

Here is the result of reverting DFP unaligned check:

http://gcc.gnu.org/ml/gcc-testresults/2008-03/msg02123.html

Here is the result of reverting DFP unaligned check + my DFP alignment
patch:

http://gcc.gnu.org/ml/gcc-testresults/2008-03/msg02125.html

Reverting DFP unaligned check + my DFP alignment patch has following
regressions:

Running target unix/-m32
FAIL: tmpdir-gcc.dg-struct-layout-1/t015
c_compat_x_tst.o-c_compat_y_tst.o execute
FAIL: tmpdir-gcc.dg-struct-layout-1/t022
c_compat_x_tst.o-c_compat_y_tst.o execute
FAIL: tmpdir-gcc.dg-struct-layout-1/t023
c_compat_x_tst.o-c_compat_y_tst.o execute
FAIL: tmpdir-gcc.dg-struct-layout-1/t024
c_compat_x_tst.o-c_compat_y_tst.o execute
FAIL: tmpdir-gcc.dg-struct-layout-1/t026
c_compat_x_tst.o-c_compat_y_tst.o execute
FAIL: tmpdir-gcc.dg-struct-layout-1/t027
c_compat_x_tst.o-c_compat_y_tst.o execute
FAIL: tmpdir-gcc.dg-struct-layout-1/t028
c_compat_x_tst.o-c_compat_y_tst.o execute

Gcc 4.3 with reverting DFP unaligned check + my DFP alignment
patch show the similar result:

http://gcc.gnu.org/ml/gcc-testresults/2008-03/msg02126.html

The problem is those tests define

typedef _Decimal128 Tal1Decimal128 __attribute__((aligned (1)));

That is TImode may be unaligned. We still need to check unaligned
TImode. In fact,
we should see extra failures in 64bit when unaligned _Decimal128 is
passed on stack:

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32000

But our testsuite doesn't check it.

I am checking only my patch into trunk/4.3 without reverting DFP
unaligned check.

Thanks.

H.J.



More information about the Gcc-patches mailing list