diff mbox

[uclibc-ng-devel] uClibc-ng - small C library for embedded systems branch master updated. v1.0.17-5-g3e40f96

Message ID 20160817194953.5632910118@helium.openadk.org
State Not Applicable
Headers show

Commit Message

wbx Aug. 17, 2016, 7:49 p.m. UTC
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "uClibc-ng - small C library for embedded systems".

The branch, master has been updated
       via  3e40f9669279f005f7154892539166f5081fbcb2 (commit)
      from  9725c0b6e4fda2db5c5aac0888d64dc97c69a332 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 3e40f9669279f005f7154892539166f5081fbcb2
Author: Vineet Gupta <Vineet.Gupta1@synopsys.com>
Date:   Tue Aug 16 15:04:27 2016 -0700

    ARC: Support syscall ABI v4
    
    The syscall ABI includes the gcc functional calling ABI since a syscall
    implies userland caller and kernel callee.
    
    The current gcc ABI (v3) for ARCv2 ISA required 64-bit data be passed in
    even-odd register pairs, (potentially punching reg holes when passing such
    values as args). This was partly driven by the fact that the double-word
    LDD/STD instructions in ARCv2 expect the register alignment and thus gcc
    forcing this avoids extra MOV at the cost of a few unused register (which we
    have plenty anyways).
    
    This however was rejected as part of upstreaming gcc port to HS. So the new
    ABI v4 doesn't enforce the even-odd reg restriction.
    
    Do note that for ARCompact ISA builds v3 and v4 are practically the same in
    terms of gcc code generation.
    
    This change is dormant for now (gcc 4.8.x based tools) and will only kick
    in with switch to gcc 6.x based tools.
    
    Signed-off-by: Vineet Gupta <vgupta@synopsys.com>

-----------------------------------------------------------------------

Summary of changes:
 libc/sysdeps/linux/arc/bits/uClibc_arch_features.h | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)



hooks/post-receive
diff mbox

Patch

diff --git a/libc/sysdeps/linux/arc/bits/uClibc_arch_features.h b/libc/sysdeps/linux/arc/bits/uClibc_arch_features.h
index 5160724..94e089d 100755
--- a/libc/sysdeps/linux/arc/bits/uClibc_arch_features.h
+++ b/libc/sysdeps/linux/arc/bits/uClibc_arch_features.h
@@ -41,8 +41,14 @@ 
 /* The default ';' is a comment on ARC. */
 #define __UCLIBC_ASM_LINE_SEP__ `
 
-/* does your target align 64bit values in register pairs ? (32bit arches only) */
-#if defined(__A7__)
+/* does your target align 64bit values in register pairs ? (32bit arches only)
+ *  - ARC700 never had any constraint on reg pairs (even if ABI v3)
+ *  - Inital HS ABI (v3: non upstream gcc) had 64-bit data aligned in even-odd
+ *     reg pairs (thus allowed reg holes when passing such args to calls)
+ *  - Upstream gcc (6.x) HS ABI doesn't have that restriction
+ */
+
+#if defined(__A7__) || (__GNUC__ > 4)
 #undef __UCLIBC_SYSCALL_ALIGN_64BIT__
 #else
 #define __UCLIBC_SYSCALL_ALIGN_64BIT__