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