diff mbox

[Cilkplus] Build Cilk Runtime for non x86.

Message ID BF230D13CA30DD48930C31D40993300016D79982@FMSMSX102.amr.corp.intel.com
State New
Headers show

Commit Message

Iyer, Balaji V March 13, 2013, 11:30 p.m. UTC
Hello Everyone,
	This attached patch is for the Cilk Plus branch affecting the Cilk Runtime. This patch should potentially allow the Cilk runtime library build for non-x86 targets. We have tested this on ARM (trimslice machine) and it seem to work on our test case. We encourage all the GCC target developers to help us expand Cilk on other targets.

Thanks,

Balaji V. Iyer.

Comments

Andrew Pinski March 13, 2013, 11:39 p.m. UTC | #1
On Wed, Mar 13, 2013 at 4:30 PM, Iyer, Balaji V <balaji.v.iyer@intel.com> wrote:
> Hello Everyone,
>         This attached patch is for the Cilk Plus branch affecting the Cilk Runtime. This patch should potentially allow the Cilk runtime library build for non-x86 targets. We have tested this on ARM (trimslice machine) and it seem to work on our test case. We encourage all the GCC target developers to help us expand Cilk on other targets.

Only comment I have is:
+    x = __sync_lock_test_and_set(ptr, x);

Use the __atomic builtins instead.  This allows for better control of
what memory barriers are wanted here.

Thanks,
Andrew
diff mbox

Patch

Index: libcilkrts/runtime/sysdep-unix.c
===================================================================
--- libcilkrts/runtime/sysdep-unix.c	(revision 196638)
+++ libcilkrts/runtime/sysdep-unix.c	(working copy)
@@ -309,11 +309,15 @@  void __cilkrts_stop_workers(global_state_t *g)
  * spawn.  This should be called each time a frame is resumed.
  */
 static inline void restore_fp_state (__cilkrts_stack_frame *sf) {
+#if defined __i386__ || defined __x86_64
     __asm__ ( "ldmxcsr %0\n\t"
               "fnclex\n\t"
               "fldcw %1"
               :
               : "m" (sf->mxcsr), "m" (sf->fpcsr));
+#else
+#   warning "unimplemented: code to restore the floating point state"
+#endif
 }
 
 /* Resume user code after a spawn or sync, possibly on a different stack.
Index: libcilkrts/runtime/os-unix.c
===================================================================
--- libcilkrts/runtime/os-unix.c	(revision 196638)
+++ libcilkrts/runtime/os-unix.c	(working copy)
@@ -344,7 +344,8 @@  COMMON_SYSDEP unsigned long long __cilkrts_gettick
     __asm__ volatile("rdtsc" : "=a" (a), "=d" (d)); 
     return ((unsigned long long)a) | (((unsigned long long)d) << 32); 
 #else
-#   error "unimplemented cycle counter"
+#   warning "unimplemented cycle counter"
+    return 0;
 #endif
 }
 
@@ -359,7 +360,7 @@  COMMON_SYSDEP void __cilkrts_short_pause(void)
 #elif defined __i386__ || defined __x86_64
     __asm__("pause");
 #else
-#   error __cilkrts_short_pause undefined
+#   warning __cilkrts_short_pause undefined
 #endif
 }
 
@@ -369,7 +370,7 @@  COMMON_SYSDEP int __cilkrts_xchg(volatile int *ptr
     /* asm statement here works around icc bugs */
     __asm__("xchgl %0,%a1" :"=r" (x) : "r" (ptr), "0" (x) :"memory");
 #else
-#   error __cilkrts_xchg undefined
+    x = __sync_lock_test_and_set(ptr, x);
 #endif
     return x;
 }
Index: libcilkrts/ChangeLog.cilkplus
===================================================================
--- libcilkrts/ChangeLog.cilkplus	(revision 196638)
+++ libcilkrts/ChangeLog.cilkplus	(working copy)
@@ -1,3 +1,13 @@ 
+2013-03-13  Balaji V. Iyer  <balaji.v.iyer@intel.com>
+
+	* runtime/sysdep-unix.c (__cilkrts_stop_workers): Inserted inline 
+	assembly inside a #if which is only invoked when compiled for i386.  
+	Otherwise, output a warning.
+	* runtime/os-unix.c (__cilkrts_gettick): Replaced #error with #warning.
+	(__cilkrts_short_pause): Likewise.
+	(__cilkrts_xchg): Likewise.
+
+
 2013-02-05  Balaji V. Iyer  <balaji.v.iyer@intel.com>
 
 	* Makefile.in (am_libcilkrts_la_OBJECTS): Removed symbol_test.
Index: configure
===================================================================
--- configure	(revision 196638)
+++ configure	(working copy)
@@ -3159,17 +3159,6 @@  if test x$enable_libgomp = x ; then
     esac
 fi
 
-# Disable libcilkrts on non x86 machines... for now.
-if test x$enable_libcilkrts = x ; then
-    # Enable libcilkrts by default on x86 machines.
-    case "${target}" in
-    i[3456789]86-*-* | x86_64-*-*)
-      ;;
-    *)
-      noconfigdirs="$noconfigdirs target-libcilkrts"
-    esac
-fi
-
 # Disable libatomic on unsupported systems.
 if test -d ${srcdir}/libatomic; then
     if test x$enable_libatomic = x; then
Index: ChangeLog.cilkplus
===================================================================
--- ChangeLog.cilkplus	(revision 0)
+++ ChangeLog.cilkplus	(revision 0)
@@ -0,0 +1,4 @@ 
+2013-03-13  Balaji V. Iyer  <balaji.v.iyer@intel.com>
+
+	* configure.ac (enable_libcilkrts): Made libcilkrts unconditional.
+	* configure (enable_libcilkrts): Likewise.
Index: configure.ac
===================================================================
--- configure.ac	(revision 196638)
+++ configure.ac	(working copy)
@@ -507,17 +507,6 @@  if test x$enable_libgomp = x ; then
     esac
 fi
 
-# Disable libcilkrts on non x86 machines... for now.
-if test x$enable_libcilkrts = x ; then
-    # Enable libcilkrts by default on x86 machines.
-    case "${target}" in
-    i[3456789]86-*-* | x86_64-*-*)
-      ;;
-    *)
-      noconfigdirs="$noconfigdirs target-libcilkrts"
-    esac
-fi
-
 # Disable libatomic on unsupported systems.
 if test -d ${srcdir}/libatomic; then
     if test x$enable_libatomic = x; then