On Tue, Oct 13, 2020 at 10:30 AM Hongyu Wang <wwwhhhyyy...@gmail.com> wrote: > > Hi: > > This patch is about to support User Interrupt (UINTR) instructions. > > This feature defines user interrupts as new events in the architecture. They > are delivered to software operating in 64-bit mode with CPL = 3 without any > change to segmentation state. > > For more details, please refer to > https://software.intel.com/content/dam/develop/external/us/en/documents/architecture-instruction-set-extensions-programming-reference.pdf > > Bootstrap ok, regression test on i386/x86 backend is ok. > > OK for master? > > gcc/ > * common/config/i386/cpuinfo.h (get_available_features): > Detect UINTR. > * common/config/i386/i386-common.c (OPTION_MASK_ISA2_UINTR_SET > OPTION_MASK_ISA2_UINTR_UNSET): New. > (ix86_handle_option): Handle -muintr. > * common/config/i386/i386-cpuinfo.h (enum processor_features): > Add FEATURE_UINTR. > * common/config/i386/i386-isas.h: Add ISA_NAMES_TABLE_ENTRY > for uintr. > * config.gcc: Add uintrintrin.h to extra_headers. > * config/i386/uintrintrin.h: New. > * config/i386/cpuid.h (bit_UINTR): New. > * config/i386/driver-i386.c (host_detect_local_cpu): Detect UINTR. > * config/i386/i386-builtin-types.def: Add new types. > * config/i386/i386-builtin.def: Add new builtins. > * config/i386/i386-builtins.c (ix86_init_mmx_sse_builtins): Add > __builtin_ia32_testui. > * config/i386/i386-builtins.h (ix86_builtins): Add > IX86_BUILTIN_TESTUI. > * config/i386/i386-c.c (ix86_target_macros_internal): Define > __UINTR__. > * config/i386/i386-expand.c (ix86_expand_special_args_builtin): > Handle UINT8_FTYPE_VOID. > (ix86_expand_builtin): Handle IX86_BUILTIN_TESTUI. > * config/i386/i386-options.c (isa2_opts): Add -muintr. > (ix86_valid_target_attribute_inner_p): Handle UINTR. > (ix86_option_override_internal): Add TARGET_64BIT check for UINTR. > * config/i386/i386.h (TARGET_UINTR, TARGET_UINTR_P, PTA_UINTR): New. > (PTA_SAPPHIRRAPIDS): Add PTA_UINTR. > * config/i386/i386.opt: Add -muintr. > * config/i386/i386.md > (define_int_iterator UINTR_UNSPECV): New. > (define_int_attr uintr_unspecv): New. > (uintr_<uintr_unspecv>, uintr_senduipi, testui): > New define_insn patterns. > * config/i386/x86gprintrin.h: Include uintrintrin.h > * doc/invoke.texi: Document -muintr. > * doc/extend.texi: Document uintr. > > gcc/testsuite/ > > * gcc.target/i386/funcspec-56.inc: Add new target attribute. > * gcc.target/i386/uintr-1.c: New test. > * gcc.target/i386/uintr-2.c: Ditto. > * gcc.target/i386/uintr-3.c: Ditto. > * gcc.target/i386/uintr-4.c: Ditto. > * gcc.target/i386/uintr-5.c: Ditto.
Please also add -muintr to g++.dg/other/i386-{2,3}.C and gcc.target/i386-sse-{12,13,14,22,23}.c. This will test new intrinsics header. OK with the above change. Thanks, Uros.