From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 114504 invoked by alias); 1 May 2017 11:31:28 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 113919 invoked by uid 89); 1 May 2017 11:31:22 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-6.1 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,GIT_PATCH_3,RCVD_IN_DNSWL_NONE,RCVD_IN_SORBS_SPAM,SPF_PASS autolearn=ham version=3.3.2 spammy=interactions, accommodate, aimed, patchsets X-HELO: mail-ua0-f193.google.com Received: from mail-ua0-f193.google.com (HELO mail-ua0-f193.google.com) (209.85.217.193) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 01 May 2017 11:31:19 +0000 Received: by mail-ua0-f193.google.com with SMTP id x28so9161716uab.3 for ; Mon, 01 May 2017 04:31:21 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=69KEBNhsQa4z42TxkpG+AoujQdCpvGODJG1Mm4ockeg=; b=mh7/wWYdeVzekV0uXRaC/HURJVWb3A3FmmuKaXR18yFbGnYNT+UHLBhOUOuP7Vurt0 gKahAKpnxnn1FHYZcWuolxmLL3MFP42VykH6QxXbeO+l2jsHv6PiOCr8MDqudMYqOHeu C/VOJtYbAInYj5HhbzXF8MxTjXFsYJMP78eF5vA+9eVVZqyWpusa3JGdORX6ZQYSkDc5 kyVMWFXTXTt/sWQSPEJLK/Tyrkls15ARyQmBFVLIQJt2GfRJ/nCHiaha9LvZg+qydNsa CPGEG9Kc7+93kccXXi9tEdPL81oEcvCCFMIFjs2YbaVmrDPe6noRl8mYgK0zCUuXzkyA +fKQ== X-Gm-Message-State: AN3rC/7Bkw0ZaaZCzfa3qUUOXh3b0asR29x/rCalNplTdUPhmDv4qMil p5yLFtklao9Uv+wdShI8TCM/H2eNxQ== X-Received: by 10.176.80.201 with SMTP id d9mr13139210uaa.35.1493638280103; Mon, 01 May 2017 04:31:20 -0700 (PDT) MIME-Version: 1.0 Received: by 10.103.49.206 with HTTP; Mon, 1 May 2017 04:31:19 -0700 (PDT) In-Reply-To: <49e81c0b-07a4-22df-d7c3-2439177ac7cf@pobox.com> References: <49e81c0b-07a4-22df-d7c3-2439177ac7cf@pobox.com> From: Uros Bizjak Date: Mon, 01 May 2017 11:31:00 -0000 Message-ID: Subject: Re: [PATCH v4 0/12] [i386] Improve 64-bit Microsoft to System V ABI pro/epilogues To: Daniel Santos Cc: gcc-patches , Jan Hubicka Content-Type: text/plain; charset=UTF-8 X-SW-Source: 2017-05/txt/msg00009.txt.bz2 On Thu, Apr 27, 2017 at 10:04 AM, Daniel Santos wrote: > All of patches are concerned with 64-bit Microsoft ABI functions that call > System V ABI function which clobbers RSI, RDI and XMM6-15 and are aimed at > improving performance and .text size of Wine 64. I had previously submitted > these as separate patch sets, but have combined them for simplicity. (Does > this make the ChangeLogs too big? Please let me know if you want me to break > these back apart.) Below are the included patchsets and a summary of changes > since the previous post(s): Well, the ChangeLog is acceptable. I have comments on how new RTX patterns are generated and checked (patches 9/12 and 11/12). Other patches look good to me, so after issues with 9/12 and 11/12 are resolved, I think the patch set is ready to go. After the above issue is addressed, I propose to move forward by committing the patchset, and resolve any possible issues later. There are just too many code paths in the stack frame construction and teardown to notice all possible interactions between new and old code. It looks that existing code won't be affected without activating new option, so we can be a bit less cautious with the patchset. An important part is thus a comprehensive added test suite, which seems to pass. I also assume that Cygwin and MinGW people agree with the patch and the functionality itself. Uros. > 1.) PR78962 Use aligned SSE movs for re-aligned MS ABI pro/epilogues. > https://gcc.gnu.org/ml/gcc-patches/2016-12/msg01859.html > > Changes: > > * The SEH unwind emit code (in winnt.c) does not currently support > CFA_REG_EXPRESSION, which is required to make this work, so I have > disabled it on SEH targets. > * Updated comments on CFA_REG_EXPRESSION in winnt.c. > > > 2.) Add option to call out-of-line stubs instead of emitting inline saves > and restores. https://gcc.gnu.org/ml/gcc-patches/2017-02/msg00548.html > > Changes: > > * Renamed option from -moutline-msabi-xlogues to -mcall-ms2sysv-xlogues > * Since this patch set depends upon aligned SSE MOVs after stack > realignment, I have disabled it on SEH targets with a sorry(). > * I was previously trying to cache the rtx for symbols to the libgcc > stubs instead of creating new ones, but this caused problems in > subsequent passes and it was disabled with a "TODO" comment. I have > removed this code, as well as the rtx cache that was just wasting > memory in class xlogue_layout. > * Improved comment documentation. > > > 3.) A comprehensive test program to validate correct behavior in these pro- > and epilogues. https://gcc.gnu.org/ml/gcc-patches/2017-02/msg00542.html > > Changes: > > * The previous version repeated all tests for each -j instead of > running in parallel. I have fixed this implementing a primitive but > effective file-based parallelization scheme. > * I noticed that there was gcc/testsuite/gcc.target/x86_64/abi > directory for tests specific to testing 64-bit abi issues, so I've > moved my tests to an "ms-sysv" subdirectory of that (instead of > gcc/testsuite/gcc.target/i386/msabi). > * Fixed breakages on Cygwin. > * Corrected a bad "_noinfo" optimization barrier (function call by > volatile pointer). > * Minor cleanup/improvements. > > > gcc/Makefile.in | 2 + > gcc/config/i386/i386.c | 916 > +++++++++++++++++++-- > gcc/config/i386/i386.h | 33 +- > gcc/config/i386/i386.opt | 4 + > gcc/config/i386/predicates.md | 155 ++++ > gcc/config/i386/sse.md | 37 + > gcc/config/i386/winnt.c | 3 +- > gcc/doc/invoke.texi | 13 +- > .../gcc.target/x86_64/abi/ms-sysv/do-test.S | 163 ++++ > gcc/testsuite/gcc.target/x86_64/abi/ms-sysv/gen.cc | 807 ++++++++++++++++++ > .../gcc.target/x86_64/abi/ms-sysv/ms-sysv.c | 373 +++++++++ > .../gcc.target/x86_64/abi/ms-sysv/ms-sysv.exp | 178 ++++ > libgcc/config.host | 2 +- > libgcc/config/i386/i386-asm.h | 82 ++ > libgcc/config/i386/resms64.S | 57 ++ > libgcc/config/i386/resms64f.S | 55 ++ > libgcc/config/i386/resms64fx.S | 57 ++ > libgcc/config/i386/resms64x.S | 59 ++ > libgcc/config/i386/savms64.S | 57 ++ > libgcc/config/i386/savms64f.S | 55 ++ > libgcc/config/i386/t-msabi | 7 + > 21 files changed, 3020 insertions(+), 95 deletions(-) > > > gcc/ChangeLog: > > 2017-04-25 Daniel Santos > > * config/i386/i386.opt: Add option -mcall-ms2sysv-xlogues. > * config/i386/i386.h > (x86_64_ms_sysv_extra_clobbered_registers): Change type to unsigned. > (NUM_X86_64_MS_CLOBBERED_REGS): New macro. > (struct machine_function): Add new members call_ms2sysv, > call_ms2sysv_pad_in, call_ms2sysv_pad_out and > call_ms2sysv_extra_regs. > (struct machine_frame_state): New fields sp_realigned and > sp_realigned_offset. > * config/i386/i386.c > (enum xlogue_stub): New enum. > (enum xlogue_stub_sets): New enum. > (class xlogue_layout): New class. > (struct ix86_frame): New fields stack_realign_allocate_offset, > stack_realign_offset and outlined_save_offset. Modify comments to > detail stack layout when using out-of-line stubs. > (ix86_target_string): Add -mcall-ms2sysv-xlogues option. > (ix86_option_override_internal): Add sorry() for TARGET_SEH and > -mcall-ms2sysv-xlogues. > (stub_managed_regs): New static variable. > (ix86_save_reg): Add new parameter ignore_outlined to optionally > omit > registers managed by out-of-line stub. > (disable_call_ms2sysv_xlogues): New function. > (ix86_compute_frame_layout): Modify re-alignment calculations, > disable > m->call_ms2sysv when appropriate and compute frame layout for > out-of-line stubs. > (sp_valid_at, fp_valid_at): New inline functions. > (choose_basereg): New function. > (choose_baseaddr): Add align parameter, use choose_basereg and > modify > all callers. > (ix86_emit_save_reg_using_mov, > ix86_emit_restore_sse_regs_using_mov): > Use align parameter of choose_baseaddr to generated aligned SSE movs > when possible. > (pro_epilogue_adjust_stack): Modify to track > machine_frame_state::sp_realigned. > (ix86_nsaved_regs): Modify to accommodate changes to ix86_save_reg. > (ix86_nsaved_sseregs): Likewise. > (ix86_emit_save_regs): Likewise. > (ix86_emit_save_regs_using_mov): Likewise. > (ix86_emit_save_sse_regs_using_mov): Likewise. > (get_scratch_register_on_entry): Likewise. > (gen_frame_set): New function. > (gen_frame_load): Likewise. > (gen_frame_store): Likewise. > (emit_outlined_ms2sysv_save): Likewise. > (emit_outlined_ms2sysv_restore): Likewise. > (ix86_expand_prologue): Modify stack re-alignment code and call > emit_outlined_ms2sysv_save when appropriate. > (ix86_emit_leave): Clear machine_frame_state::sp_realigned. Add > parameter rtx_insn *insn, which allows the function to be used to > only > generate the notes. > (ix86_expand_epilogue): Modify validity checks of frame and stack > pointers, and call emit_outlined_ms2sysv_restore when appropriate. > (ix86_expand_call): Modify to enable m->call_ms2sysv when > appropriate. > * config/i386/predicates.md > (save_multiple): New predicate. > (restore_multiple): Likewise. > * config/i386/sse.md > (save_multiple): New pattern. > (save_multiple_realign): Likewise. > (restore_multiple): Likewise. > (restore_multiple_and_return): Likewise. > (restore_multiple_leave_return): Likewise. > * Makefile.in: Export HOSTCXX and HOSTCXXFLAGS to site.exp > > gcc/testsuite/ChangeLog: > > 2017-04-25 Daniel Santos > > * config.host: Add i386/t-msabi to i386/t-linux file list. > * config/i386/i386-asm.h: New file. > * config/i386/resms64.S: New file. > * config/i386/resms64f.S: New file. > * config/i386/resms64fx.S: New file. > * config/i386/resms64x.S: New file. > * config/i386/savms64.S: New file. > * config/i386/savms64f.S: New file. > * config/i386/t-msabi: New file. > > libgcc/ChangeLog: > > 2017-04-25 Daniel Santos > > * gcc.target/x86_64/abi/ms-sysv/do-test.S: New file. > * gcc.target/x86_64/abi/ms-sysv/gen.cc: Likewise. > * gcc.target/x86_64/abi/ms-sysv/ms-sysv.c: Likewise. > * gcc.target/x86_64/abi/ms-sysv/ms-sysv.exp: Likewise. >