On Fri, Nov 8, 2024 at 1:21 PM Hongtao Liu <crazy...@gmail.com> wrote:
>
> On Fri, Nov 8, 2024 at 12:18 PM H.J. Lu <hjl.to...@gmail.com> wrote:
> >
> > On Fri, Nov 8, 2024 at 10:41 AM Hu, Lin1 <lin1...@intel.com> wrote:
> > >
> > > Hi, all
> > >
> > > -maddress-mode=long will let Pmode = DI_mode, but -mx32 request x32 ABI.
> > > So raise an error to avoid ICE.
> > >
> > > Bootstrapped and regtested, OK for trunk?
> > >
> > > BRs,
> > > Lin
> > >
> > > gcc/ChangeLog:
> > >
> > >         PR target/117418
> > >         * config/i386/i386-options.cc (ix86_option_override_internal): 
> > > raise an
> > >         error with option -mx32 -maddress-mode=long.
> > >
> > > gcc/testsuite/ChangeLog:
> > >
> > >         PR target/117418
> > >         * gcc.target/i386/pr117418-1.c: New test.
> > > ---
> > >  gcc/config/i386/i386-options.cc            |  4 ++++
> > >  gcc/testsuite/gcc.target/i386/pr117418-1.c | 13 +++++++++++++
> > >  2 files changed, 17 insertions(+)
> > >  create mode 100644 gcc/testsuite/gcc.target/i386/pr117418-1.c
> > >
> > > diff --git a/gcc/config/i386/i386-options.cc 
> > > b/gcc/config/i386/i386-options.cc
> > > index 239269ecbdd..ba1abea2537 100644
> > > --- a/gcc/config/i386/i386-options.cc
> > > +++ b/gcc/config/i386/i386-options.cc
> > > @@ -2190,6 +2190,10 @@ ix86_option_override_internal (bool main_args_p,
> > >         error ("address mode %qs not supported in the %s bit mode",
> > >                TARGET_64BIT_P (opts->x_ix86_isa_flags) ? "short" : "long",
> > >                TARGET_64BIT_P (opts->x_ix86_isa_flags) ? "64" : "32");
> > > +
> > > +      if (TARGET_X32_P (opts->x_ix86_isa_flags)
> > > +         && opts_set->x_ix86_pmode == PMODE_DI)
> > > +       error ("address mode 'long' not supported in the x32 ABI");
> >
> > This looks wrong.   Try the encoded patch.
> >
> So it means -maddress-mode=long will override x32 to use 64-bit pointer?
No, answered by myself.
The upper 32-bit is zero, so it's still 32-bit memory space although
it uses a 64-bit register as a pointer.
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82267
> > >      }
> > >    else
> > >      opts->x_ix86_pmode = TARGET_LP64_P (opts->x_ix86_isa_flags)
> > > diff --git a/gcc/testsuite/gcc.target/i386/pr117418-1.c 
> > > b/gcc/testsuite/gcc.target/i386/pr117418-1.c
> > > new file mode 100644
> > > index 00000000000..08430ef9d4b
> > > --- /dev/null
> > > +++ b/gcc/testsuite/gcc.target/i386/pr117418-1.c
> > > @@ -0,0 +1,13 @@
> > > +/* PR target/117418 */
> > > +/* { dg-do compile } */
> > > +/* { dg-options "-maddress-mode=long -mwidekl -mx32" } */
> > > +/* { dg-error "address mode 'long' not supported in the x32 ABI" "" { 
> > > target *-*-* } 0 } */
> > > +
> > > +typedef __attribute__((__vector_size__(16))) long long V;
> > > +V a;
> > > +
> > > +void
> > > +foo()
> > > +{
> > > +    __builtin_ia32_encodekey256_u32(0, a, a, &a);
> > > +}
> > > --
> > > 2.31.1
> > >
> >
> >
> > --
> > H.J.
>
>
>
> --
> BR,
> Hongtao



-- 
BR,
Hongtao

Reply via email to