svn commit: r318601 - in head: contrib/compiler-rt/lib/builtins lib/libcompiler_rt

Adrian Chadd adrian at FreeBSD.org
Sun May 21 23:15:34 UTC 2017


Author: adrian
Date: Sun May 21 23:15:32 2017
New Revision: 318601
URL: https://svnweb.freebsd.org/changeset/base/318601

Log:
  [libcompiler-rt] add bswapdi2/bswapsi2
  
  This is required for mips gcc 6.3 userland to build/run.
  
  Reviewed by:	emaste, dim
  Approved by:	emaste
  Differential Revision:	https://reviews.freebsd.org/D10838

Added:
  head/contrib/compiler-rt/lib/builtins/bswapdi2.c   (contents, props changed)
  head/contrib/compiler-rt/lib/builtins/bswapsi2.c   (contents, props changed)
Modified:
  head/contrib/compiler-rt/lib/builtins/README.txt
  head/lib/libcompiler_rt/Makefile.inc

Modified: head/contrib/compiler-rt/lib/builtins/README.txt
==============================================================================
--- head/contrib/compiler-rt/lib/builtins/README.txt	Sun May 21 22:28:28 2017	(r318600)
+++ head/contrib/compiler-rt/lib/builtins/README.txt	Sun May 21 23:15:32 2017	(r318601)
@@ -57,8 +57,8 @@ si_int __popcountsi2(si_int a);  // bit 
 si_int __popcountdi2(di_int a);  // bit population
 si_int __popcountti2(ti_int a);  // bit population
 
-uint32_t __bswapsi2(uint32_t a);   // a byteswapped, arm only
-uint64_t __bswapdi2(uint64_t a);   // a byteswapped, arm only
+uint32_t __bswapsi2(uint32_t a);   // a byteswapped, arm/mips only
+uint64_t __bswapdi2(uint64_t a);   // a byteswapped, arm/mips only
 
 // Integral arithmetic
 

Added: head/contrib/compiler-rt/lib/builtins/bswapdi2.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/contrib/compiler-rt/lib/builtins/bswapdi2.c	Sun May 21 23:15:32 2017	(r318601)
@@ -0,0 +1,28 @@
+/* ===-- bswapdi2.c - Implement __bswapdi2 ---------------------------------===
+ *
+ *               The LLVM Compiler Infrastructure
+ *
+ * This file is dual licensed under the MIT and the University of Illinois Open
+ * Source Licenses. See LICENSE.TXT for details.
+ *
+ * ===----------------------------------------------------------------------===
+ *
+ * This file implements __bswapdi2 for the compiler_rt library.
+ *
+ * ===----------------------------------------------------------------------===
+ */
+
+#include "int_lib.h"
+
+COMPILER_RT_ABI uint64_t
+__bswapdi2 (uint64_t u)
+{
+	return ((((u) & 0xff00000000000000ULL) >> 56)
+	    | (((u) & 0x00ff000000000000ULL) >> 40)
+	    | (((u) & 0x0000ff0000000000ULL) >> 24)
+	    | (((u) & 0x000000ff00000000ULL) >>  8)
+	    | (((u) & 0x00000000ff000000ULL) <<  8)
+	    | (((u) & 0x0000000000ff0000ULL) << 24)
+	    | (((u) & 0x000000000000ff00ULL) << 40)
+	    | (((u) & 0x00000000000000ffULL) << 56));
+}

Added: head/contrib/compiler-rt/lib/builtins/bswapsi2.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/contrib/compiler-rt/lib/builtins/bswapsi2.c	Sun May 21 23:15:32 2017	(r318601)
@@ -0,0 +1,25 @@
+/* ===-- bswapsi2.c - Implement __bswapsi2 ---------------------------------===
+ *
+ *               The LLVM Compiler Infrastructure
+ *
+ * This file is dual licensed under the MIT and the University of Illinois Open
+ * Source Licenses. See LICENSE.TXT for details.
+ *
+ * ===----------------------------------------------------------------------===
+ *
+ * This file implements __bswapsi2 for the compiler_rt library.
+ *
+ * ===----------------------------------------------------------------------===
+ */
+
+#include "int_lib.h"
+
+COMPILER_RT_ABI uint32_t
+__bswapsi2 (uint32_t u)
+{
+
+	return ((((u) & 0xff000000) >> 24)
+	    | (((u) & 0x00ff0000) >>  8)
+	    | (((u) & 0x0000ff00) <<  8)
+	    | (((u) & 0x000000ff) << 24));
+}

Modified: head/lib/libcompiler_rt/Makefile.inc
==============================================================================
--- head/lib/libcompiler_rt/Makefile.inc	Sun May 21 22:28:28 2017	(r318600)
+++ head/lib/libcompiler_rt/Makefile.inc	Sun May 21 23:15:32 2017	(r318601)
@@ -224,3 +224,10 @@ SRCS+=		switch8.S
 SRCS+=		switchu8.S
 SRCS+=		sync_synchronize.S
 .endif
+
+# GCC-6.3 on mips32 requires bswap32 built-in.
+.if ${MACHINE_CPUARCH} == "mips"
+SRCS+=		bswapdi2.c
+SRCS+=		bswapsi2.c
+.endif
+


More information about the svn-src-head mailing list