<html><body>
<p><font size="2" face="sans-serif">Hi,</font><br>
<br>
<font size="2" face="sans-serif">Attached a patch built on top of Hal Finkel's BGQ patch for PPC64 (thanks Hal).</font><br>
<font size="2" face="sans-serif">In this patch, I extended the existing cmake system while waiting for patches from Intel, which I will fix once they get in.</font><br>
<br>
<font size="2" face="sans-serif">-- Carlo</font><br>
<br>
<br>
<br>
<font size="2" face="sans-serif">diff --git a/runtime/Makefile.bgq b/runtime/Makefile.bgq</font><br>
<font size="2" face="sans-serif">new file mode 100644</font><br>
<font size="2" face="sans-serif">index 0000000..d9aa914</font><br>
<font size="2" face="sans-serif">--- /dev/null</font><br>
<font size="2" face="sans-serif">+++ b/runtime/Makefile.bgq</font><br>
<font size="2" face="sans-serif">@@ -0,0 +1,76 @@</font><br>
<font size="2" face="sans-serif">+date := $(shell date '+%Y%m%d')</font><br>
<font size="2" face="sans-serif">+</font><br>
<font size="2" face="sans-serif">+FEATURE_FLAGS = -DOMP_40_ENABLED=1 -DOMP_30_ENABLED=1 -DOMP_VERSION=201107 -DKMP_VERSION_MAJOR=5 \</font><br>
<font size="2" face="sans-serif">+            -DCACHE_LINE=64 -DKMP_ADJUST_BLOCKTIME=1 -DBUILD_I8 -DKMP_USE_ADAPTIVE_LOCKS=0 \</font><br>
<font size="2" face="sans-serif">+            -DKMP_DEBUG_ADAPTIVE_LOCKS=0 -DINTEL_NO_ITTNOTIFY_API -DKMP_VERSION_MINOR=0 -DKMP_VERSION_BUILD=0 \</font><br>
<font size="2" face="sans-serif">+            -DKMP_LIBRARY_FILE=\"libiomp5.so\" -D_KMP_BUILD_TIME="\"$(date)\"" -DKMP_GOMP_COMPAT</font><br>
<font size="2" face="sans-serif">+</font><br>
<font size="2" face="sans-serif">+CPPFLAGS = ${FEATURE_FLAGS} -D__float128='long double'</font><br>
<font size="2" face="sans-serif">+</font><br>
<font size="2" face="sans-serif">+CC = powerpc64-bgq-linux-gcc</font><br>
<font size="2" face="sans-serif">+CXX = powerpc64-bgq-linux-g++</font><br>
<font size="2" face="sans-serif">+</font><br>
<font size="2" face="sans-serif">+all: build/libiomp5.a build/libiomp5.so</font><br>
<font size="2" face="sans-serif">+</font><br>
<font size="2" face="sans-serif">+build/.dir:</font><br>
<font size="2" face="sans-serif">+    mkdir -p build</font><br>
<font size="2" face="sans-serif">+    touch build/.dir</font><br>
<font size="2" face="sans-serif">+</font><br>
<font size="2" face="sans-serif">+build/omp.h:</font><br>
<font size="2" face="sans-serif">+    perl tools/expand-vars.pl --strict $$(echo $(FEATURE_FLAGS) | sed 's/-D/-D /g') \</font><br>
<font size="2" face="sans-serif">+      -D KMP_BUILD_DATE=$(date) -D Revision=Revision -D Date=Date \</font><br>
<font size="2" face="sans-serif">+      src/include/40/omp.h.var build/omp.h</font><br>
<font size="2" face="sans-serif">+</font><br>
<font size="2" face="sans-serif">+build/%.o: src/%.cpp build/kmp_i18n_id.inc build/kmp_i18n_default.inc build/omp.h</font><br>
<font size="2" face="sans-serif">+    ${CXX} -c ${CPPFLAGS} -g -O3 -Isrc -Ibuild -o $@ $<</font><br>
<font size="2" face="sans-serif">+</font><br>
<font size="2" face="sans-serif">+build/%.o: src/%.c build/kmp_i18n_id.inc build/kmp_i18n_default.inc build/omp.h</font><br>
<font size="2" face="sans-serif">+    ${CC} -x c++ -c ${CPPFLAGS} -g -O3 -Isrc -Ibuild -o $@ $<</font><br>
<font size="2" face="sans-serif">+</font><br>
<font size="2" face="sans-serif">+OBJS =      build/kmp_alloc.o \</font><br>
<font size="2" face="sans-serif">+    build/kmp_atomic.o \</font><br>
<font size="2" face="sans-serif">+    build/kmp_cancel.o \</font><br>
<font size="2" face="sans-serif">+    build/kmp_csupport.o \</font><br>
<font size="2" face="sans-serif">+    build/kmp_dispatch.o \</font><br>
<font size="2" face="sans-serif">+    build/kmp_debug.o \</font><br>
<font size="2" face="sans-serif">+    build/kmp_environment.o \</font><br>
<font size="2" face="sans-serif">+    build/kmp_error.o \</font><br>
<font size="2" face="sans-serif">+    build/kmp_ftn_cdecl.o \</font><br>
<font size="2" face="sans-serif">+    build/kmp_ftn_extra.o \</font><br>
<font size="2" face="sans-serif">+    build/kmp_ftn_stdcall.o \</font><br>
<font size="2" face="sans-serif">+    build/kmp_global.o \</font><br>
<font size="2" face="sans-serif">+    build/kmp_i18n.o \</font><br>
<font size="2" face="sans-serif">+    build/kmp_io.o \</font><br>
<font size="2" face="sans-serif">+    build/kmp_itt.o \</font><br>
<font size="2" face="sans-serif">+    build/kmp_runtime.o \</font><br>
<font size="2" face="sans-serif">+    build/kmp_settings.o \</font><br>
<font size="2" face="sans-serif">+    build/kmp_sched.o \</font><br>
<font size="2" face="sans-serif">+    build/kmp_str.o \</font><br>
<font size="2" face="sans-serif">+    build/kmp_tasking.o \</font><br>
<font size="2" face="sans-serif">+    build/kmp_taskq.o \</font><br>
<font size="2" face="sans-serif">+    build/kmp_taskdeps.o \</font><br>
<font size="2" face="sans-serif">+    build/kmp_threadprivate.o \</font><br>
<font size="2" face="sans-serif">+    build/kmp_utility.o \</font><br>
<font size="2" face="sans-serif">+    build/kmp_version.o \</font><br>
<font size="2" face="sans-serif">+    build/kmp_lock.o \</font><br>
<font size="2" face="sans-serif">+    build/z_Linux_util.o</font><br>
<font size="2" face="sans-serif">+</font><br>
<font size="2" face="sans-serif">+BGSYS_FLOOR=$(shell readlink /bgsys/drivers/ppcfloor)</font><br>
<font size="2" face="sans-serif">+build/libiomp5.so: $(OBJS)</font><br>
<font size="2" face="sans-serif">+    ${CXX} -Wl,--build-id -Wl,-rpath -Wl,${BGSYS_FLOOR}/gnu-linux/powerpc64-bgq-linux/lib -shared -o $@.1.0 $^ -Wl,-soname,$(shell basename $@.1) -lpthread</font><br>
<font size="2" face="sans-serif">+    (cd $(shell dirname $@) && ln -sf $(shell basename $@.1.0) $(shell basename $@.1))</font><br>
<font size="2" face="sans-serif">+    (cd $(shell dirname $@) && ln -sf $(shell basename $@.1) $(shell basename $@))</font><br>
<font size="2" face="sans-serif">+# Note: We should not need the --build-id when we switch to clang (it should add it for us).</font><br>
<font size="2" face="sans-serif">+</font><br>
<font size="2" face="sans-serif">+build/libiomp5.a: $(OBJS)</font><br>
<font size="2" face="sans-serif">+    ar cr $@ $^</font><br>
<font size="2" face="sans-serif">+</font><br>
<font size="2" face="sans-serif">+build/kmp_i18n_id.inc: src/i18n/en_US.txt tools/message-converter.pl build/.dir</font><br>
<font size="2" face="sans-serif">+    perl tools/message-converter.pl --prefix=kmp_i18n --enum=$@ $<</font><br>
<font size="2" face="sans-serif">+</font><br>
<font size="2" face="sans-serif">+build/kmp_i18n_default.inc: src/i18n/en_US.txt tools/message-converter.pl build/.dir</font><br>
<font size="2" face="sans-serif">+    perl tools/message-converter.pl --prefix=kmp_i18n --default=$@ $<</font><br>
<font size="2" face="sans-serif">+</font><br>
<font size="2" face="sans-serif">+clean:</font><br>
<font size="2" face="sans-serif">+    rm -rf build</font><br>
<font size="2" face="sans-serif">+</font><br>
<font size="2" face="sans-serif">diff --git a/runtime/src/CMakeLists.txt b/runtime/src/CMakeLists.txt</font><br>
<font size="2" face="sans-serif">index dd29966..4814cb4 100644</font><br>
<font size="2" face="sans-serif">--- a/runtime/src/CMakeLists.txt</font><br>
<font size="2" face="sans-serif">+++ b/runtime/src/CMakeLists.txt</font><br>
<font size="2" face="sans-serif">@@ -12,6 +12,9 @@ include_directories(</font><br>
<font size="2" face="sans-serif">   ${CMAKE_CURRENT_BINARY_DIR}</font><br>
<font size="2" face="sans-serif"> )</font><br>
<font size="2" face="sans-serif"> </font><br>
<font size="2" face="sans-serif">+# detect architecture</font><br>
<font size="2" face="sans-serif">+EXECUTE_PROCESS( COMMAND uname -m COMMAND tr -d '\n' OUTPUT_VARIABLE ARCH )</font><br>
<font size="2" face="sans-serif">+</font><br>
<font size="2" face="sans-serif"> if(WIN32)</font><br>
<font size="2" face="sans-serif">   set(OS_GEN "win")</font><br>
<font size="2" face="sans-serif"> elseif(APPLE)</font><br>
<font size="2" face="sans-serif">@@ -22,12 +25,14 @@ else()</font><br>
<font size="2" face="sans-serif">   message(FATAL_ERROR "Unsupported OS")</font><br>
<font size="2" face="sans-serif"> endif()</font><br>
<font size="2" face="sans-serif"> </font><br>
<font size="2" face="sans-serif">-if("${ARCH}" STREQUAL "")</font><br>
<font size="2" face="sans-serif">+if(NOT "${ARCH}" STREQUAL "ppc64")</font><br>
<font size="2" face="sans-serif">   set(ARCH "32e")</font><br>
<font size="2" face="sans-serif">+  set(ARCH_STR "Intel(R) 64")</font><br>
<font size="2" face="sans-serif">+else()</font><br>
<font size="2" face="sans-serif">+# arch already set above</font><br>
<font size="2" face="sans-serif">+  set(ARCH_STR "PPC64")</font><br>
<font size="2" face="sans-serif"> endif()</font><br>
<font size="2" face="sans-serif"> </font><br>
<font size="2" face="sans-serif">-set(ARCH_STR "Intel(R) 64")</font><br>
<font size="2" face="sans-serif">-</font><br>
<font size="2" face="sans-serif"> set(FEATURE_FLAGS "-D USE_ITT_BUILD")</font><br>
<font size="2" face="sans-serif"> set(FEATURE_FLAGS "${FEATURE_FLAGS} -D NDEBUG")</font><br>
<font size="2" face="sans-serif"> set(FEATURE_FLAGS "${FEATURE_FLAGS} -D KMP_ARCH_STR=\"\\\"${ARCH_STR}\\\"\"")</font><br>
<font size="2" face="sans-serif">@@ -50,8 +55,13 @@ set(FEATURE_FLAGS "${FEATURE_FLAGS} -D USE_LOAD_BALANCE")</font><br>
<font size="2" face="sans-serif"> set(FEATURE_FLAGS "${FEATURE_FLAGS} -D USE_CBLKDATA")</font><br>
<font size="2" face="sans-serif"> set(FEATURE_FLAGS "${FEATURE_FLAGS} -D GUIDEDLL_EXPORTS")</font><br>
<font size="2" face="sans-serif"> set(FEATURE_FLAGS "${FEATURE_FLAGS} -D KMP_GOMP_COMPAT")</font><br>
<font size="2" face="sans-serif">-set(FEATURE_FLAGS "${FEATURE_FLAGS} -D KMP_USE_ADAPTIVE_LOCKS=1")</font><br>
<font size="2" face="sans-serif">-set(FEATURE_FLAGS "${FEATURE_FLAGS} -D KMP_DEBUG_ADAPTIVE_LOCKS=0")</font><br>
<font size="2" face="sans-serif">+</font><br>
<font size="2" face="sans-serif">+#adaptive locks use x86 assembly - disable for ppc64</font><br>
<font size="2" face="sans-serif">+if(NOT "${ARCH}" STREQUAL "ppc64")</font><br>
<font size="2" face="sans-serif">+    set(FEATURE_FLAGS "${FEATURE_FLAGS} -D KMP_USE_ADAPTIVE_LOCKS=1")</font><br>
<font size="2" face="sans-serif">+    set(FEATURE_FLAGS "${FEATURE_FLAGS} -D KMP_DEBUG_ADAPTIVE_LOCKS=0")</font><br>
<font size="2" face="sans-serif">+endif()</font><br>
<font size="2" face="sans-serif">+</font><br>
<font size="2" face="sans-serif"> set(FEATURE_FLAGS "${FEATURE_FLAGS} -D OMP_50_ENABLED=0")</font><br>
<font size="2" face="sans-serif"> set(FEATURE_FLAGS "${FEATURE_FLAGS} -D OMP_41_ENABLED=0")</font><br>
<font size="2" face="sans-serif"> set(FEATURE_FLAGS "${FEATURE_FLAGS} -D OMP_40_ENABLED=1")</font><br>
<font size="2" face="sans-serif">@@ -122,16 +132,35 @@ add_custom_command(</font><br>
<font size="2" face="sans-serif">   OUTPUT omp.h</font><br>
<font size="2" face="sans-serif">     COMMAND perl ${CMAKE_CURRENT_SOURCE_DIR}/../tools/expand-vars.pl --strict -D Revision=\"\\$$Revision\" -D Date=\"\\$$Date\" -D KMP_TYPE=\"Performance\" -D KMP_ARCH=\"\\\"${ARCH_STR}\\\"\" -D KMP_VERSION_MAJOR=${VERSION} -D KMP_VERSION_MINOR=0 -D KMP_VERSION_BUILD=00000000 -D KMP_BUILD_DATE=\"${BUILD_TIME} UTC\" -D KMP_TARGET_COMPILER=12 -D KMP_DIAG=0 -D KMP_DEBUG_INFO=0 -D OMP_VERSION=${OMP_VERSION} ${CMAKE_CURRENT_SOURCE_DIR}/include/${OMP_VERSION_NUM}/omp.h.var omp.h</font><br>
<font size="2" face="sans-serif"> )</font><br>
<font size="2" face="sans-serif">-add_custom_command(</font><br>
<font size="2" face="sans-serif">-  OUTPUT z_Linux_asm.o</font><br>
<font size="2" face="sans-serif">-    COMMAND ${CMAKE_CXX_COMPILER} -c -o z_Linux_asm.o -D KMP_ASM_INTRINS -D KMP_GOMP_COMPAT -D KMP_ARCH_X86_64 -x assembler-with-cpp ${CMAKE_CURRENT_SOURCE_DIR}/${ASM_SOURCES}</font><br>
<font size="2" face="sans-serif">-)</font><br>
<font size="2" face="sans-serif">+</font><br>
<font size="2" face="sans-serif">+if(NOT "${ARCH}" STREQUAL "ppc64")</font><br>
<font size="2" face="sans-serif">+    add_custom_command(</font><br>
<font size="2" face="sans-serif">+               OUTPUT z_Linux_asm.o</font><br>
<font size="2" face="sans-serif">+                  COMMAND ${CMAKE_CXX_COMPILER} -c -o z_Linux_asm.o -D KMP_ASM_INTRINS -D KMP_GOMP_COMPAT -D KMP_ARCH_X86_64 -x assembler-with-cpp ${CMAKE_CURRENT_SOURCE_DIR}/${ASM_SOURCES}</font><br>
<font size="2" face="sans-serif">+    )</font><br>
<font size="2" face="sans-serif">+else()</font><br>
<font size="2" face="sans-serif">+    add_custom_command(</font><br>
<font size="2" face="sans-serif">+               OUTPUT z_Linux_asm.o</font><br>
<font size="2" face="sans-serif">+                  COMMAND ${CMAKE_CXX_COMPILER} -c -o z_Linux_asm.o -D KMP_ASM_INTRINS -D KMP_GOMP_COMPAT -D KMP_ARCH_PPC64 -x assembler-with-cpp ${CMAKE_CURRENT_SOURCE_DIR}/${ASM_SOURCES}</font><br>
<font size="2" face="sans-serif">+    )</font><br>
<font size="2" face="sans-serif">+</font><br>
<font size="2" face="sans-serif">+endif()</font><br>
<font size="2" face="sans-serif">+</font><br>
<font size="2" face="sans-serif"> </font><br>
<font size="2" face="sans-serif"> add_custom_target(gen_kmp_i18n DEPENDS kmp_i18n_id.inc kmp_i18n_default.inc omp.h z_Linux_asm.o)</font><br>
<font size="2" face="sans-serif"> </font><br>
<font size="2" face="sans-serif"> if(NOT APPLE)</font><br>
<font size="2" face="sans-serif">-  set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/exports_so.txt")</font><br>
<font size="2" face="sans-serif">+    set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/exports_so.txt -ldl")</font><br>
<font size="2" face="sans-serif"> endif()</font><br>
<font size="2" face="sans-serif"> </font><br>
<font size="2" face="sans-serif"> add_library(iomp5 SHARED ${SOURCES} z_Linux_asm.o)</font><br>
<font size="2" face="sans-serif">+</font><br>
<font size="2" face="sans-serif">+# This is a workaround to a known ppc64 issue about libpthread. For more</font><br>
<font size="2" face="sans-serif">+# information see</font><br>
<font size="2" face="sans-serif">+# <a href="http://ryanarn.blogspot.com/2011/07/curious-case-of-pthreadatfork-on.html">http://ryanarn.blogspot.com/2011/07/curious-case-of-pthreadatfork-on.html</a></font><br>
<font size="2" face="sans-serif">+if("${ARCH}" STREQUAL "ppc64")</font><br>
<font size="2" face="sans-serif">+    find_library(PTHREAD NAMES pthread)</font><br>
<font size="2" face="sans-serif">+    target_link_libraries(iomp5 ${PTHREAD})</font><br>
<font size="2" face="sans-serif">+endif()</font><br>
<font size="2" face="sans-serif">+</font><br>
<font size="2" face="sans-serif"> add_dependencies(iomp5 gen_kmp_i18n)</font><br>
<font size="2" face="sans-serif">diff --git a/runtime/src/kmp.h b/runtime/src/kmp.h</font><br>
<font size="2" face="sans-serif">index a8c600b..f5dd10f 100644</font><br>
<font size="2" face="sans-serif">--- a/runtime/src/kmp.h</font><br>
<font size="2" face="sans-serif">+++ b/runtime/src/kmp.h</font><br>
<font size="2" face="sans-serif">@@ -459,9 +459,9 @@ typedef int PACKED_REDUCTION_METHOD_T;</font><br>
<font size="2" face="sans-serif"> /*</font><br>
<font size="2" face="sans-serif">  * Only Linux* OS and Windows* OS support thread affinity.</font><br>
<font size="2" face="sans-serif">  */</font><br>
<font size="2" face="sans-serif">-#if KMP_OS_LINUX || KMP_OS_WINDOWS</font><br>
<font size="2" face="sans-serif">+#if (KMP_OS_LINUX || KMP_OS_WINDOWS) && !KMP_OS_CNK && !KMP_ARCH_PPC64</font><br>
<font size="2" face="sans-serif"> # define KMP_AFFINITY_SUPPORTED 1</font><br>
<font size="2" face="sans-serif">-#elif KMP_OS_DARWIN || KMP_OS_FREEBSD</font><br>
<font size="2" face="sans-serif">+#elif KMP_OS_DARWIN || KMP_OS_FREEBSD || KMP_OS_CNK || KMP_ARCH_PPC64</font><br>
<font size="2" face="sans-serif"> // affinity not supported</font><br>
<font size="2" face="sans-serif"> # define KMP_AFFINITY_SUPPORTED 0</font><br>
<font size="2" face="sans-serif"> #else</font><br>
<font size="2" face="sans-serif">@@ -476,7 +476,7 @@ extern size_t __kmp_affin_mask_size;</font><br>
<font size="2" face="sans-serif"> </font><br>
<font size="2" face="sans-serif"> # if KMP_OS_LINUX</font><br>
<font size="2" face="sans-serif"> //</font><br>
<font size="2" face="sans-serif">-// On Linux* OS, the mask isactually a vector of length __kmp_affin_mask_size</font><br>
<font size="2" face="sans-serif">+// On Linux* OS, the mask is actually a vector of length __kmp_affin_mask_size</font><br>
<font size="2" face="sans-serif"> // (in bytes).  It should be allocated on a word boundary.</font><br>
<font size="2" face="sans-serif"> //</font><br>
<font size="2" face="sans-serif"> // WARNING!!!  We have made the base type of the affinity mask unsigned char,</font><br>
<font size="2" face="sans-serif">@@ -946,6 +946,9 @@ extern unsigned int __kmp_place_core_offset;</font><br>
<font size="2" face="sans-serif"> #if KMP_OS_WINDOWS</font><br>
<font size="2" face="sans-serif"> #  define KMP_INIT_WAIT    64U          /* initial number of spin-tests   */</font><br>
<font size="2" face="sans-serif"> #  define KMP_NEXT_WAIT    32U          /* susequent number of spin-tests */</font><br>
<font size="2" face="sans-serif">+#elif KMP_OS_CNK</font><br>
<font size="2" face="sans-serif">+#  define KMP_INIT_WAIT    16U          /* initial number of spin-tests   */</font><br>
<font size="2" face="sans-serif">+#  define KMP_NEXT_WAIT     8U          /* susequent number of spin-tests */</font><br>
<font size="2" face="sans-serif"> #elif KMP_OS_LINUX</font><br>
<font size="2" face="sans-serif"> #  define KMP_INIT_WAIT  1024U          /* initial number of spin-tests   */</font><br>
<font size="2" face="sans-serif"> #  define KMP_NEXT_WAIT   512U          /* susequent number of spin-tests */</font><br>
<font size="2" face="sans-serif">@@ -971,6 +974,11 @@ extern void __kmp_x86_cpuid( int mode, int mode2, struct kmp_cpuid *p );</font><br>
<font size="2" face="sans-serif">   extern void __kmp_x86_pause( void );</font><br>
<font size="2" face="sans-serif"> # endif</font><br>
<font size="2" face="sans-serif"> # define KMP_CPU_PAUSE()        __kmp_x86_pause()</font><br>
<font size="2" face="sans-serif">+#elif KMP_ARCH_PPC64</font><br>
<font size="2" face="sans-serif">+# define KMP_PPC64_PRI_LOW() __asm__ volatile ("or 1, 1, 1")</font><br>
<font size="2" face="sans-serif">+# define KMP_PPC64_PRI_MED() __asm__ volatile ("or 2, 2, 2")</font><br>
<font size="2" face="sans-serif">+# define KMP_PPC64_PRI_LOC_MB() __asm__ volatile ("" : : : "memory")</font><br>
<font size="2" face="sans-serif">+# define KMP_CPU_PAUSE() do { KMP_PPC64_PRI_LOW(); KMP_PPC64_PRI_MED(); KMP_PPC64_PRI_LOC_MB(); } while (0)</font><br>
<font size="2" face="sans-serif"> #else</font><br>
<font size="2" face="sans-serif"> # define KMP_CPU_PAUSE()        /* nothing to do */</font><br>
<font size="2" face="sans-serif"> #endif</font><br>
<font size="2" face="sans-serif">diff --git a/runtime/src/kmp_csupport.c b/runtime/src/kmp_csupport.c</font><br>
<font size="2" face="sans-serif">index 18b6c35..0b7d3ed 100644</font><br>
<font size="2" face="sans-serif">--- a/runtime/src/kmp_csupport.c</font><br>
<font size="2" face="sans-serif">+++ b/runtime/src/kmp_csupport.c</font><br>
<font size="2" face="sans-serif">@@ -837,6 +837,19 @@ __kmpc_flush(ident_t *loc, ...)</font><br>
<font size="2" face="sans-serif">             #endif // KMP_MIC</font><br>
<font size="2" face="sans-serif">         #elif KMP_ARCH_ARM</font><br>
<font size="2" face="sans-serif">             // Nothing yet</font><br>
<font size="2" face="sans-serif">+    #elif KMP_ARCH_PPC64</font><br>
<font size="2" face="sans-serif">+            // Nothing needed here (we have a real MB above).</font><br>
<font size="2" face="sans-serif">+            #if KMP_OS_CNK</font><br>
<font size="2" face="sans-serif">+            // The flushing thread needs to yield here; this prevents a</font><br>
<font size="2" face="sans-serif">+            // busy-waiting thread from saturating the pipeline. flush is</font><br>
<font size="2" face="sans-serif">+            // often used in loops like this:</font><br>
<font size="2" face="sans-serif">+                // while (!flag) {</font><br>
<font size="2" face="sans-serif">+                //   #pragma omp flush(flag)</font><br>
<font size="2" face="sans-serif">+                // }</font><br>
<font size="2" face="sans-serif">+            // and adding the yield here is good for at least a 10x speedup</font><br>
<font size="2" face="sans-serif">+            // when running >2 threads per core (on the NAS LU benchmark).</font><br>
<font size="2" face="sans-serif">+                __kmp_yield(TRUE);</font><br>
<font size="2" face="sans-serif">+            #endif</font><br>
<font size="2" face="sans-serif">         #else</font><br>
<font size="2" face="sans-serif">             #error Unknown or unsupported architecture</font><br>
<font size="2" face="sans-serif">         #endif</font><br>
<font size="2" face="sans-serif">diff --git a/runtime/src/kmp_ftn_os.h b/runtime/src/kmp_ftn_os.h</font><br>
<font size="2" face="sans-serif">index f241751..d78d846 100644</font><br>
<font size="2" face="sans-serif">--- a/runtime/src/kmp_ftn_os.h</font><br>
<font size="2" face="sans-serif">+++ b/runtime/src/kmp_ftn_os.h</font><br>
<font size="2" face="sans-serif">@@ -478,7 +478,7 @@</font><br>
<font size="2" face="sans-serif"> //#define KMP_API_NAME_GOMP_TARGET_UPDATE                GOMP_target_update</font><br>
<font size="2" face="sans-serif"> #define KMP_API_NAME_GOMP_TEAMS                          GOMP_teams</font><br>
<font size="2" face="sans-serif"> </font><br>
<font size="2" face="sans-serif">-#if KMP_OS_LINUX</font><br>
<font size="2" face="sans-serif">+#if KMP_OS_LINUX && !KMP_OS_CNK && !KMP_ARCH_PPC64</font><br>
<font size="2" face="sans-serif">     #define xstr(x) str(x) </font><br>
<font size="2" face="sans-serif">     #define str(x) #x</font><br>
<font size="2" face="sans-serif"> </font><br>
<font size="2" face="sans-serif">diff --git a/runtime/src/kmp_global.c b/runtime/src/kmp_global.c</font><br>
<font size="2" face="sans-serif">index aa1f8e3..d3c3195 100644</font><br>
<font size="2" face="sans-serif">--- a/runtime/src/kmp_global.c</font><br>
<font size="2" face="sans-serif">+++ b/runtime/src/kmp_global.c</font><br>
<font size="2" face="sans-serif">@@ -321,7 +321,11 @@ int        __kmp_env_consistency_check  = FALSE;  /* KMP_CONSISTENCY_CHECK speci</font><br>
<font size="2" face="sans-serif"> kmp_uint32 __kmp_yield_init = KMP_INIT_WAIT;</font><br>
<font size="2" face="sans-serif"> kmp_uint32 __kmp_yield_next = KMP_NEXT_WAIT;</font><br>
<font size="2" face="sans-serif"> kmp_uint32 __kmp_yielding_on = 1;</font><br>
<font size="2" face="sans-serif">+#if KMP_OS_CNK</font><br>
<font size="2" face="sans-serif">+kmp_uint32 __kmp_yield_cycle = 0;</font><br>
<font size="2" face="sans-serif">+#else</font><br>
<font size="2" face="sans-serif"> kmp_uint32 __kmp_yield_cycle = 1;     /* Yield-cycle is on by default */</font><br>
<font size="2" face="sans-serif">+#endif</font><br>
<font size="2" face="sans-serif"> kmp_int32  __kmp_yield_on_count = 10; /* By default, yielding is on for 10 monitor periods. */</font><br>
<font size="2" face="sans-serif"> kmp_int32  __kmp_yield_off_count = 1; /* By default, yielding is off for 1 monitor periods. */</font><br>
<font size="2" face="sans-serif"> /* ----------------------------------------------------- */</font><br>
<font size="2" face="sans-serif">diff --git a/runtime/src/kmp_gsupport.c b/runtime/src/kmp_gsupport.c</font><br>
<font size="2" face="sans-serif">index 9d8e553..aa52024 100644</font><br>
<font size="2" face="sans-serif">--- a/runtime/src/kmp_gsupport.c</font><br>
<font size="2" face="sans-serif">+++ b/runtime/src/kmp_gsupport.c</font><br>
<font size="2" face="sans-serif">@@ -15,7 +15,7 @@</font><br>
<font size="2" face="sans-serif"> //===----------------------------------------------------------------------===//</font><br>
<font size="2" face="sans-serif"> </font><br>
<font size="2" face="sans-serif"> </font><br>
<font size="2" face="sans-serif">-#if defined(__x86_64)</font><br>
<font size="2" face="sans-serif">+#if defined(__x86_64) || defined (__powerpc64__)</font><br>
<font size="2" face="sans-serif"> # define KMP_I8</font><br>
<font size="2" face="sans-serif"> #endif</font><br>
<font size="2" face="sans-serif"> #include "kmp.h"</font><br>
<font size="2" face="sans-serif">diff --git a/runtime/src/kmp_lock.h b/runtime/src/kmp_lock.h</font><br>
<font size="2" face="sans-serif">index 8009d18..c5ce838 100644</font><br>
<font size="2" face="sans-serif">--- a/runtime/src/kmp_lock.h</font><br>
<font size="2" face="sans-serif">+++ b/runtime/src/kmp_lock.h</font><br>
<font size="2" face="sans-serif">@@ -518,7 +518,7 @@ __kmp_destroy_bootstrap_lock( kmp_bootstrap_lock_t *lck )</font><br>
<font size="2" face="sans-serif"> // Internal RTL locks are also implemented as ticket locks, for now.</font><br>
<font size="2" face="sans-serif"> //</font><br>
<font size="2" face="sans-serif"> // FIXME - We should go through and figure out which lock kind works best for</font><br>
<font size="2" face="sans-serif">-// each internal lock, and use the type deeclaration and function calls for</font><br>
<font size="2" face="sans-serif">+// each internal lock, and use the type declaration and function calls for</font><br>
<font size="2" face="sans-serif"> // that explicit lock kind (and get rid of this section).</font><br>
<font size="2" face="sans-serif"> //</font><br>
<font size="2" face="sans-serif"> </font><br>
<font size="2" face="sans-serif">diff --git a/runtime/src/kmp_os.h b/runtime/src/kmp_os.h</font><br>
<font size="2" face="sans-serif">index bb5e72f..db1981e 100644</font><br>
<font size="2" face="sans-serif">--- a/runtime/src/kmp_os.h</font><br>
<font size="2" face="sans-serif">+++ b/runtime/src/kmp_os.h</font><br>
<font size="2" face="sans-serif">@@ -66,10 +66,12 @@</font><br>
<font size="2" face="sans-serif"> #define KMP_OS_FREEBSD  0</font><br>
<font size="2" face="sans-serif"> #define KMP_OS_DARWIN   0</font><br>
<font size="2" face="sans-serif"> #define KMP_OS_WINDOWS    0</font><br>
<font size="2" face="sans-serif">+#define KMP_OS_CNK      0</font><br>
<font size="2" face="sans-serif"> #define KMP_OS_UNIX     0  /* disjunction of KMP_OS_LINUX, KMP_OS_DARWIN etc. */</font><br>
<font size="2" face="sans-serif"> </font><br>
<font size="2" face="sans-serif"> #define KMP_ARCH_X86        0</font><br>
<font size="2" face="sans-serif"> #define KMP_ARCH_X86_64            0</font><br>
<font size="2" face="sans-serif">+#define KMP_ARCH_PPC64      0</font><br>
<font size="2" face="sans-serif"> </font><br>
<font size="2" face="sans-serif"> #ifdef _WIN32</font><br>
<font size="2" face="sans-serif"> # undef KMP_OS_WINDOWS</font><br>
<font size="2" face="sans-serif">@@ -91,6 +93,11 @@</font><br>
<font size="2" face="sans-serif"> # define KMP_OS_FREEBSD 1</font><br>
<font size="2" face="sans-serif"> #endif</font><br>
<font size="2" face="sans-serif"> </font><br>
<font size="2" face="sans-serif">+#if ( defined __bgq__ )</font><br>
<font size="2" face="sans-serif">+# undef KMP_OS_CNK</font><br>
<font size="2" face="sans-serif">+# define KMP_OS_CNK 1</font><br>
<font size="2" face="sans-serif">+#endif</font><br>
<font size="2" face="sans-serif">+</font><br>
<font size="2" face="sans-serif"> #if (1 != KMP_OS_LINUX + KMP_OS_FREEBSD + KMP_OS_DARWIN + KMP_OS_WINDOWS)</font><br>
<font size="2" face="sans-serif"> # error Unknown OS</font><br>
<font size="2" face="sans-serif"> #endif</font><br>
<font size="2" face="sans-serif">@@ -117,6 +124,9 @@</font><br>
<font size="2" face="sans-serif"> # elif defined __i386</font><br>
<font size="2" face="sans-serif"> #  undef KMP_ARCH_X86</font><br>
<font size="2" face="sans-serif"> #  define KMP_ARCH_X86 1</font><br>
<font size="2" face="sans-serif">+# elif defined __powerpc64__</font><br>
<font size="2" face="sans-serif">+#  undef KMP_ARCH_PPC64</font><br>
<font size="2" face="sans-serif">+#  define KMP_ARCH_PPC64 1</font><br>
<font size="2" face="sans-serif"> # endif</font><br>
<font size="2" face="sans-serif"> #endif</font><br>
<font size="2" face="sans-serif"> </font><br>
<font size="2" face="sans-serif">@@ -156,7 +166,7 @@</font><br>
<font size="2" face="sans-serif"> # define KMP_ARCH_ARM 1</font><br>
<font size="2" face="sans-serif"> #endif</font><br>
<font size="2" face="sans-serif"> </font><br>
<font size="2" face="sans-serif">-#if (1 != KMP_ARCH_X86 + KMP_ARCH_X86_64 + KMP_ARCH_ARM)</font><br>
<font size="2" face="sans-serif">+#if (1 != KMP_ARCH_X86 + KMP_ARCH_X86_64 + KMP_ARCH_ARM + KMP_ARCH_PPC64)</font><br>
<font size="2" face="sans-serif"> # error Unknown or unsupported architecture</font><br>
<font size="2" face="sans-serif"> #endif</font><br>
<font size="2" face="sans-serif"> </font><br>
<font size="2" face="sans-serif">@@ -232,7 +242,7 @@</font><br>
<font size="2" face="sans-serif"> </font><br>
<font size="2" face="sans-serif"> #if KMP_ARCH_X86 || KMP_ARCH_ARM</font><br>
<font size="2" face="sans-serif"> # define KMP_SIZE_T_SPEC KMP_UINT32_SPEC</font><br>
<font size="2" face="sans-serif">-#elif KMP_ARCH_X86_64</font><br>
<font size="2" face="sans-serif">+#elif KMP_ARCH_X86_64 || KMP_ARCH_PPC64</font><br>
<font size="2" face="sans-serif"> # define KMP_SIZE_T_SPEC KMP_UINT64_SPEC</font><br>
<font size="2" face="sans-serif"> #else</font><br>
<font size="2" face="sans-serif"> # error "Can't determine size_t printf format specifier."</font><br>
<font size="2" face="sans-serif">@@ -657,6 +667,10 @@ extern kmp_real64 __kmp_test_then_add_real64 ( volatile kmp_real64 *p, kmp_real6</font><br>
<font size="2" face="sans-serif"> # endif</font><br>
<font size="2" face="sans-serif"> #endif /* KMP_OS_WINDOWS */</font><br>
<font size="2" face="sans-serif"> </font><br>
<font size="2" face="sans-serif">+#if KMP_ARCH_PPC64</font><br>
<font size="2" face="sans-serif">+# define KMP_MB()       __sync_synchronize()</font><br>
<font size="2" face="sans-serif">+#endif</font><br>
<font size="2" face="sans-serif">+</font><br>
<font size="2" face="sans-serif"> #ifndef KMP_MB</font><br>
<font size="2" face="sans-serif"> # define KMP_MB()       /* nothing to do */</font><br>
<font size="2" face="sans-serif"> #endif</font><br>
<font size="2" face="sans-serif">@@ -763,7 +777,7 @@ typedef void    (*microtask_t)( int *gtid, int *npr, ... );</font><br>
<font size="2" face="sans-serif"> #endif /* KMP_I8 */</font><br>
<font size="2" face="sans-serif"> </font><br>
<font size="2" face="sans-serif"> /* Workaround for Intel(R) 64 code gen bug when taking address of static array (Intel(R) 64 Tracker #138) */</font><br>
<font size="2" face="sans-serif">-#if KMP_ARCH_X86_64 && KMP_OS_LINUX</font><br>
<font size="2" face="sans-serif">+#if (KMP_ARCH_X86_64 || KMP_ARCH_PPC64) && KMP_OS_LINUX</font><br>
<font size="2" face="sans-serif"> # define STATIC_EFI2_WORKAROUND</font><br>
<font size="2" face="sans-serif"> #else</font><br>
<font size="2" face="sans-serif"> # define STATIC_EFI2_WORKAROUND static</font><br>
<font size="2" face="sans-serif">diff --git a/runtime/src/kmp_runtime.c b/runtime/src/kmp_runtime.c</font><br>
<font size="2" face="sans-serif">index fea41d0..d243700 100644</font><br>
<font size="2" face="sans-serif">--- a/runtime/src/kmp_runtime.c</font><br>
<font size="2" face="sans-serif">+++ b/runtime/src/kmp_runtime.c</font><br>
<font size="2" face="sans-serif">@@ -8450,7 +8450,7 @@ __kmp_determine_reduction_method( ident_t *loc, kmp_int32 global_tid,</font><br>
<font size="2" face="sans-serif">         int atomic_available = FAST_REDUCTION_ATOMIC_METHOD_GENERATED;</font><br>
<font size="2" face="sans-serif">         int tree_available   = FAST_REDUCTION_TREE_METHOD_GENERATED;</font><br>
<font size="2" face="sans-serif"> </font><br>
<font size="2" face="sans-serif">-        #if KMP_ARCH_X86_64</font><br>
<font size="2" face="sans-serif">+        #if KMP_ARCH_X86_64 || KMP_ARCH_PPC64</font><br>
<font size="2" face="sans-serif"> </font><br>
<font size="2" face="sans-serif">             #if KMP_OS_LINUX || KMP_OS_FREEBSD || KMP_OS_WINDOWS || KMP_OS_DARWIN</font><br>
<font size="2" face="sans-serif">                 #if KMP_MIC</font><br>
<font size="2" face="sans-serif">diff --git a/runtime/src/kmp_settings.c b/runtime/src/kmp_settings.c</font><br>
<font size="2" face="sans-serif">index 54745cb..b85678e 100644</font><br>
<font size="2" face="sans-serif">--- a/runtime/src/kmp_settings.c</font><br>
<font size="2" face="sans-serif">+++ b/runtime/src/kmp_settings.c</font><br>
<font size="2" face="sans-serif">@@ -536,6 +536,7 @@ __kmp_stg_parse_file(</font><br>
<font size="2" face="sans-serif"> </font><br>
<font size="2" face="sans-serif"> static char * par_range_to_print = NULL;</font><br>
<font size="2" face="sans-serif"> </font><br>
<font size="2" face="sans-serif">+#ifdef KMP_DEBUG</font><br>
<font size="2" face="sans-serif"> static void</font><br>
<font size="2" face="sans-serif"> __kmp_stg_parse_par_range(</font><br>
<font size="2" face="sans-serif">     char const * name,</font><br>
<font size="2" face="sans-serif">@@ -614,7 +615,7 @@ __kmp_stg_parse_par_range(</font><br>
<font size="2" face="sans-serif">         break;</font><br>
<font size="2" face="sans-serif">     }</font><br>
<font size="2" face="sans-serif"> } // __kmp_stg_parse_par_range</font><br>
<font size="2" face="sans-serif">-</font><br>
<font size="2" face="sans-serif">+#endif</font><br>
<font size="2" face="sans-serif"> </font><br>
<font size="2" face="sans-serif"> int</font><br>
<font size="2" face="sans-serif"> __kmp_initial_threads_capacity( int req_nproc )</font><br>
<font size="2" face="sans-serif">diff --git a/runtime/src/kmp_version.c b/runtime/src/kmp_version.c</font><br>
<font size="2" face="sans-serif">index f64d052..5dc82d1 100644</font><br>
<font size="2" face="sans-serif">--- a/runtime/src/kmp_version.c</font><br>
<font size="2" face="sans-serif">+++ b/runtime/src/kmp_version.c</font><br>
<font size="2" face="sans-serif">@@ -20,7 +20,7 @@</font><br>
<font size="2" face="sans-serif"> #include "kmp_version.h"</font><br>
<font size="2" face="sans-serif"> </font><br>
<font size="2" face="sans-serif"> // Replace with snapshot date YYYYMMDD for promotion build.</font><br>
<font size="2" face="sans-serif">-#define KMP_VERSION_BUILD    00000000</font><br>
<font size="2" face="sans-serif">+//#define KMP_VERSION_BUILD    00000000</font><br>
<font size="2" face="sans-serif"> </font><br>
<font size="2" face="sans-serif"> // Helper macros to convert value of macro to string literal.</font><br>
<font size="2" face="sans-serif"> #define _stringer( x ) #x</font><br>
<font size="2" face="sans-serif">diff --git a/runtime/src/makefile.mk b/runtime/src/makefile.mk</font><br>
<font size="2" face="sans-serif">index 9be8799..84d6ac2 100644</font><br>
<font size="2" face="sans-serif">--- a/runtime/src/makefile.mk</font><br>
<font size="2" face="sans-serif">+++ b/runtime/src/makefile.mk</font><br>
<font size="2" face="sans-serif">@@ -310,6 +310,9 @@ endif</font><br>
<font size="2" face="sans-serif"> ifeq "$(CPLUSPLUS)" "on"</font><br>
<font size="2" face="sans-serif">     ifeq "$(os)" "win"</font><br>
<font size="2" face="sans-serif">         c-flags   += -TP</font><br>
<font size="2" face="sans-serif">+    else ifeq "$(arch)" "ppc64"</font><br>
<font size="2" face="sans-serif">+    # c++0x on ppc64 linux removes definition of preproc. macros, needed in .hs</font><br>
<font size="2" face="sans-serif">+          c-flags   += -x c++ -std=gnu++0x</font><br>
<font size="2" face="sans-serif">     else</font><br>
<font size="2" face="sans-serif">         ifneq "$(filter gcc clang,$(c))" ""</font><br>
<font size="2" face="sans-serif">             c-flags   += -x c++ -std=c++0x</font><br>
<font size="2" face="sans-serif">@@ -370,7 +373,7 @@ ifeq "$(os)" "lin"</font><br>
<font size="2" face="sans-serif">             ld-flags-extra += -lirc_pic</font><br>
<font size="2" face="sans-serif">             endif</font><br>
<font size="2" face="sans-serif">         endif</font><br>
<font size="2" face="sans-serif">-        ifeq "$(filter 32 32e 64,$(arch))" ""</font><br>
<font size="2" face="sans-serif">+        ifeq "$(filter 32 32e 64 ppc64,$(arch))" ""</font><br>
<font size="2" face="sans-serif">             ld-flags-extra += $(shell pkg-config --libs libffi)</font><br>
<font size="2" face="sans-serif">         endif</font><br>
<font size="2" face="sans-serif">     else</font><br>
<font size="2" face="sans-serif">@@ -581,9 +584,12 @@ ifneq "$(os)" "win"</font><br>
<font size="2" face="sans-serif">     ifeq "$(arch)" "arm"</font><br>
<font size="2" face="sans-serif">         z_Linux_asm$(obj) : \</font><br>
<font size="2" face="sans-serif">                    cpp-flags += -D KMP_ARCH_ARM</font><br>
<font size="2" face="sans-serif">-    else</font><br>
<font size="2" face="sans-serif">+    else ifeq "$(arch)" "ppc64"</font><br>
<font size="2" face="sans-serif">+        z_Linux_asm$(obj) : \</font><br>
<font size="2" face="sans-serif">+                cpp-flags += -D KMP_ARCH_PPC64</font><br>
<font size="2" face="sans-serif">+    else</font><br>
<font size="2" face="sans-serif">         z_Linux_asm$(obj) : \</font><br>
<font size="2" face="sans-serif">-            cpp-flags += -D KMP_ARCH_X86$(if $(filter 32e,$(arch)),_64)</font><br>
<font size="2" face="sans-serif">+                 cpp-flags += -D KMP_ARCH_X86$(if $(filter 32e,$(arch)),_64)               </font><br>
<font size="2" face="sans-serif">     endif</font><br>
<font size="2" face="sans-serif"> endif</font><br>
<font size="2" face="sans-serif"> </font><br>
<font size="2" face="sans-serif">@@ -729,7 +735,9 @@ endif</font><br>
<font size="2" face="sans-serif">         else # 5</font><br>
<font size="2" face="sans-serif">             lib_c_items += kmp_gsupport</font><br>
<font size="2" face="sans-serif">         endif</font><br>
<font size="2" face="sans-serif">+#        ifneq "$(arch)" "ppc64"</font><br>
<font size="2" face="sans-serif">         lib_asm_items += z_Linux_asm</font><br>
<font size="2" face="sans-serif">+#       endif</font><br>
<font size="2" face="sans-serif">     endif</font><br>
<font size="2" face="sans-serif"> endif</font><br>
<font size="2" face="sans-serif"> </font><br>
<font size="2" face="sans-serif">@@ -1391,9 +1399,13 @@ ifneq "$(filter %-dyna win-%,$(os)-$(LINK_TYPE))" ""</font><br>
<font size="2" face="sans-serif">             td_exp += libc.so.6</font><br>
<font size="2" face="sans-serif">             td_exp += ld-linux-armhf.so.3</font><br>
<font size="2" face="sans-serif">         endif</font><br>
<font size="2" face="sans-serif">+        ifeq "$(arch)" "ppc64"</font><br>
<font size="2" face="sans-serif">+            td_exp += libc.so.6</font><br>
<font size="2" face="sans-serif">+            td_exp += ld64.so.1</font><br>
<font size="2" face="sans-serif">+        endif</font><br>
<font size="2" face="sans-serif">         td_exp += libdl.so.2</font><br>
<font size="2" face="sans-serif">         td_exp += libgcc_s.so.1</font><br>
<font size="2" face="sans-serif">-        ifeq "$(filter 32 32e 64,$(arch))" ""</font><br>
<font size="2" face="sans-serif">+        ifeq "$(filter 32 32e 64 ppc64,$(arch))" ""</font><br>
<font size="2" face="sans-serif">             td_exp += libffi.so.6
</font><br>
<font size="2" face="sans-serif">             td_exp += libffi.so.5</font><br>
<font size="2" face="sans-serif">         endif</font><br>
<font size="2" face="sans-serif">diff --git a/runtime/src/thirdparty/ittnotify/ittnotify_config.h b/runtime/src/thirdparty/ittnotify/ittnotify_config.h</font><br>
<font size="2" face="sans-serif">index 40c8614..9e7b36b 100644</font><br>
<font size="2" face="sans-serif">--- a/runtime/src/thirdparty/ittnotify/ittnotify_config.h</font><br>
<font size="2" face="sans-serif">+++ b/runtime/src/thirdparty/ittnotify/ittnotify_config.h</font><br>
<font size="2" face="sans-serif">@@ -132,6 +132,11 @@</font><br>
<font size="2" face="sans-serif"> #  define ITT_ARCH_ARM  4</font><br>
<font size="2" face="sans-serif"> #endif /* ITT_ARCH_ARM */</font><br>
<font size="2" face="sans-serif"> </font><br>
<font size="2" face="sans-serif">+#ifndef ITT_ARCH_PPC64</font><br>
<font size="2" face="sans-serif">+#  define ITT_ARCH_PPC64  5</font><br>
<font size="2" face="sans-serif">+#endif /* ITT_ARCH_PPC64 */</font><br>
<font size="2" face="sans-serif">+</font><br>
<font size="2" face="sans-serif">+</font><br>
<font size="2" face="sans-serif"> #ifndef ITT_ARCH</font><br>
<font size="2" face="sans-serif"> #  if defined _M_IX86 || defined __i386__</font><br>
<font size="2" face="sans-serif"> #    define ITT_ARCH ITT_ARCH_IA32</font><br>
<font size="2" face="sans-serif">@@ -141,6 +146,8 @@</font><br>
<font size="2" face="sans-serif"> #    define ITT_ARCH ITT_ARCH_IA64</font><br>
<font size="2" face="sans-serif"> #  elif defined _M_ARM || __arm__</font><br>
<font size="2" face="sans-serif"> #    define ITT_ARCH ITT_ARCH_ARM</font><br>
<font size="2" face="sans-serif">+#  elif defined __powerpc64__</font><br>
<font size="2" face="sans-serif">+#    define ITT_ARCH ITT_ARCH_PPC64</font><br>
<font size="2" face="sans-serif"> #  endif</font><br>
<font size="2" face="sans-serif"> #endif</font><br>
<font size="2" face="sans-serif"> </font><br>
<font size="2" face="sans-serif">@@ -274,7 +281,7 @@ ITT_INLINE long __TBB_machine_fetchadd4(volatile void* ptr, long addend)</font><br>
<font size="2" face="sans-serif">                           : "memory");</font><br>
<font size="2" face="sans-serif">     return result;</font><br>
<font size="2" face="sans-serif"> }</font><br>
<font size="2" face="sans-serif">-#elif ITT_ARCH==ITT_ARCH_ARM</font><br>
<font size="2" face="sans-serif">+#elif ITT_ARCH==ITT_ARCH_ARM || ITT_ARCH==ITT_ARCH_PPC64</font><br>
<font size="2" face="sans-serif"> #define __TBB_machine_fetchadd4(addr, val) __sync_fetch_and_add(addr, val)</font><br>
<font size="2" face="sans-serif"> #endif /* ITT_ARCH==ITT_ARCH_IA64 */</font><br>
<font size="2" face="sans-serif"> #ifndef ITT_SIMPLE_INIT</font><br>
<font size="2" face="sans-serif">diff --git a/runtime/src/z_Linux_asm.s b/runtime/src/z_Linux_asm.s</font><br>
<font size="2" face="sans-serif">index 1f1ba1b..64c8052 100644</font><br>
<font size="2" face="sans-serif">--- a/runtime/src/z_Linux_asm.s</font><br>
<font size="2" face="sans-serif">+++ b/runtime/src/z_Linux_asm.s</font><br>
<font size="2" face="sans-serif">@@ -138,7 +138,7 @@ __kmp_unnamed_critical_addr:</font><br>
<font size="2" face="sans-serif"> #endif /* KMP_GOMP_COMPAT */</font><br>
<font size="2" face="sans-serif"> </font><br>
<font size="2" face="sans-serif"> </font><br>
<font size="2" face="sans-serif">-#if KMP_ARCH_X86</font><br>
<font size="2" face="sans-serif">+#if KMP_ARCH_X86 && !KMP_ARCH_PPC64</font><br>
<font size="2" face="sans-serif"> </font><br>
<font size="2" face="sans-serif"> // -----------------------------------------------------------------------</font><br>
<font size="2" face="sans-serif"> // microtasking routines specifically written for IA-32 architecture</font><br>
<font size="2" face="sans-serif">@@ -1585,6 +1585,16 @@ __kmp_unnamed_critical_addr:</font><br>
<font size="2" face="sans-serif">     .size __kmp_unnamed_critical_addr,4</font><br>
<font size="2" face="sans-serif"> #endif /* KMP_ARCH_ARM */</font><br>
<font size="2" face="sans-serif"> </font><br>
<font size="2" face="sans-serif">+#if KMP_ARCH_PPC64</font><br>
<font size="2" face="sans-serif">+    .data</font><br>
<font size="2" face="sans-serif">+    .comm .gomp_critical_user_,32,8</font><br>
<font size="2" face="sans-serif">+    .data</font><br>
<font size="2" face="sans-serif">+    .align 8</font><br>
<font size="2" face="sans-serif">+    .global __kmp_unnamed_critical_addr</font><br>
<font size="2" face="sans-serif">+__kmp_unnamed_critical_addr:</font><br>
<font size="2" face="sans-serif">+    .8byte .gomp_critical_user_</font><br>
<font size="2" face="sans-serif">+    .size __kmp_unnamed_critical_addr,8</font><br>
<font size="2" face="sans-serif">+#endif /* KMP_ARCH_PPC64 */</font><br>
<font size="2" face="sans-serif"> </font><br>
<font size="2" face="sans-serif"> #if defined(__linux__)</font><br>
<font size="2" face="sans-serif"> .section .note.GNU-stack,"",@progbits</font><br>
<font size="2" face="sans-serif">diff --git a/runtime/src/z_Linux_util.c b/runtime/src/z_Linux_util.c</font><br>
<font size="2" face="sans-serif">index 7633f99..348f5d8 100644</font><br>
<font size="2" face="sans-serif">--- a/runtime/src/z_Linux_util.c</font><br>
<font size="2" face="sans-serif">+++ b/runtime/src/z_Linux_util.c</font><br>
<font size="2" face="sans-serif">@@ -32,7 +32,7 @@</font><br>
<font size="2" face="sans-serif"> #include <sys/resource.h></font><br>
<font size="2" face="sans-serif"> #include <sys/syscall.h></font><br>
<font size="2" face="sans-serif"> </font><br>
<font size="2" face="sans-serif">-#if KMP_OS_LINUX</font><br>
<font size="2" face="sans-serif">+#if KMP_OS_LINUX && !KMP_OS_CNK</font><br>
<font size="2" face="sans-serif"> # include <sys/sysinfo.h></font><br>
<font size="2" face="sans-serif"> # if KMP_OS_LINUX && (KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_ARM)</font><br>
<font size="2" face="sans-serif"> // We should really include <futex.h>, but that causes compatibility problems on different</font><br>
<font size="2" face="sans-serif">@@ -61,7 +61,7 @@</font><br>
<font size="2" face="sans-serif"> #include <fcntl.h></font><br>
<font size="2" face="sans-serif"> </font><br>
<font size="2" face="sans-serif"> // For non-x86 architecture</font><br>
<font size="2" face="sans-serif">-#if KMP_COMPILER_GCC && !(KMP_ARCH_X86 || KMP_ARCH_X86_64)</font><br>
<font size="2" face="sans-serif">+#if KMP_COMPILER_GCC && !(KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_PPC64)</font><br>
<font size="2" face="sans-serif"> # include <stdbool.h></font><br>
<font size="2" face="sans-serif"> # include <ffi.h></font><br>
<font size="2" face="sans-serif"> #endif</font><br>
<font size="2" face="sans-serif">@@ -110,7 +110,7 @@ __kmp_print_cond( char *buffer, kmp_cond_align_t *cond )</font><br>
<font size="2" face="sans-serif"> /* ------------------------------------------------------------------------ */</font><br>
<font size="2" face="sans-serif"> /* ------------------------------------------------------------------------ */</font><br>
<font size="2" face="sans-serif"> </font><br>
<font size="2" face="sans-serif">-#if KMP_OS_LINUX && KMP_AFFINITY_SUPPORTED</font><br>
<font size="2" face="sans-serif">+#if ( KMP_OS_LINUX && KMP_AFFINITY_SUPPORTED)</font><br>
<font size="2" face="sans-serif"> </font><br>
<font size="2" face="sans-serif"> /*</font><br>
<font size="2" face="sans-serif">  * Affinity support</font><br>
<font size="2" face="sans-serif">@@ -147,6 +147,19 @@ __kmp_print_cond( char *buffer, kmp_cond_align_t *cond )</font><br>
<font size="2" face="sans-serif"> #    error Wrong code for getaffinity system call.</font><br>
<font size="2" face="sans-serif"> #   endif /* __NR_sched_getaffinity */</font><br>
<font size="2" face="sans-serif"> </font><br>
<font size="2" face="sans-serif">+#  elif KMP_ARCH_PPC64</font><br>
<font size="2" face="sans-serif">+#   ifndef __NR_sched_setaffinity</font><br>
<font size="2" face="sans-serif">+#    define __NR_sched_setaffinity  222</font><br>
<font size="2" face="sans-serif">+#   elif __NR_sched_setaffinity != 222</font><br>
<font size="2" face="sans-serif">+#    error Wrong code for setaffinity system call.</font><br>
<font size="2" face="sans-serif">+#   endif /* __NR_sched_setaffinity */</font><br>
<font size="2" face="sans-serif">+#   ifndef __NR_sched_getaffinity</font><br>
<font size="2" face="sans-serif">+#    define __NR_sched_getaffinity  223</font><br>
<font size="2" face="sans-serif">+#   elif __NR_sched_getaffinity != 223</font><br>
<font size="2" face="sans-serif">+#    error Wrong code for getaffinity system call.</font><br>
<font size="2" face="sans-serif">+#   endif /* __NR_sched_getaffinity */</font><br>
<font size="2" face="sans-serif">+</font><br>
<font size="2" face="sans-serif">+</font><br>
<font size="2" face="sans-serif"> #  else</font><br>
<font size="2" face="sans-serif"> #   error Unknown or unsupported architecture</font><br>
<font size="2" face="sans-serif"> </font><br>
<font size="2" face="sans-serif">@@ -445,7 +458,7 @@ __kmp_change_thread_affinity_mask( int gtid, kmp_affin_mask_t *new_mask,</font><br>
<font size="2" face="sans-serif"> /* ------------------------------------------------------------------------ */</font><br>
<font size="2" face="sans-serif"> /* ------------------------------------------------------------------------ */</font><br>
<font size="2" face="sans-serif"> </font><br>
<font size="2" face="sans-serif">-#if KMP_OS_LINUX && (KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_ARM)</font><br>
<font size="2" face="sans-serif">+#if KMP_OS_LINUX && (KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_ARM) && !KMP_OS_CNK</font><br>
<font size="2" face="sans-serif"> </font><br>
<font size="2" face="sans-serif"> int</font><br>
<font size="2" face="sans-serif"> __kmp_futex_determine_capable()</font><br>
<font size="2" face="sans-serif">@@ -462,7 +475,7 @@ __kmp_futex_determine_capable()</font><br>
<font size="2" face="sans-serif">     return retval;</font><br>
<font size="2" face="sans-serif"> }</font><br>
<font size="2" face="sans-serif"> </font><br>
<font size="2" face="sans-serif">-#endif // KMP_OS_LINUX && (KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_ARM)</font><br>
<font size="2" face="sans-serif">+#endif // KMP_OS_LINUX && (KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_ARM) && !KMP_OS_CNK</font><br>
<font size="2" face="sans-serif"> </font><br>
<font size="2" face="sans-serif"> /* ------------------------------------------------------------------------ */</font><br>
<font size="2" face="sans-serif"> /* ------------------------------------------------------------------------ */</font><br>
<font size="2" face="sans-serif">@@ -481,7 +494,7 @@ __kmp_test_then_or32( volatile kmp_int32 *p, kmp_int32 d )</font><br>
<font size="2" face="sans-serif">     old_value = TCR_4( *p );</font><br>
<font size="2" face="sans-serif">     new_value = old_value | d;</font><br>
<font size="2" face="sans-serif"> </font><br>
<font size="2" face="sans-serif">-    while ( ! __kmp_compare_and_store32 ( p, old_value, new_value ) )</font><br>
<font size="2" face="sans-serif">+    while ( ! KMP_COMPARE_AND_STORE_REL32 ( p, old_value, new_value ) )</font><br>
<font size="2" face="sans-serif">     {</font><br>
<font size="2" face="sans-serif">         KMP_CPU_PAUSE();</font><br>
<font size="2" face="sans-serif">         old_value = TCR_4( *p );</font><br>
<font size="2" face="sans-serif">@@ -498,7 +511,7 @@ __kmp_test_then_and32( volatile kmp_int32 *p, kmp_int32 d )</font><br>
<font size="2" face="sans-serif">     old_value = TCR_4( *p );</font><br>
<font size="2" face="sans-serif">     new_value = old_value & d;</font><br>
<font size="2" face="sans-serif"> </font><br>
<font size="2" face="sans-serif">-    while ( ! __kmp_compare_and_store32 ( p, old_value, new_value ) )</font><br>
<font size="2" face="sans-serif">+    while ( ! KMP_COMPARE_AND_STORE_REL32 ( p, old_value, new_value ) )</font><br>
<font size="2" face="sans-serif">     {</font><br>
<font size="2" face="sans-serif">         KMP_CPU_PAUSE();</font><br>
<font size="2" face="sans-serif">         old_value = TCR_4( *p );</font><br>
<font size="2" face="sans-serif">@@ -507,7 +520,7 @@ __kmp_test_then_and32( volatile kmp_int32 *p, kmp_int32 d )</font><br>
<font size="2" face="sans-serif">     return old_value;</font><br>
<font size="2" face="sans-serif"> }</font><br>
<font size="2" face="sans-serif"> </font><br>
<font size="2" face="sans-serif">-# if KMP_ARCH_X86</font><br>
<font size="2" face="sans-serif">+# if KMP_ARCH_X86 || KMP_ARCH_PPC64</font><br>
<font size="2" face="sans-serif"> kmp_int64</font><br>
<font size="2" face="sans-serif"> __kmp_test_then_add64( volatile kmp_int64 *p, kmp_int64 d )</font><br>
<font size="2" face="sans-serif"> {</font><br>
<font size="2" face="sans-serif">@@ -516,7 +529,7 @@ __kmp_test_then_add64( volatile kmp_int64 *p, kmp_int64 d )</font><br>
<font size="2" face="sans-serif">     old_value = TCR_8( *p );</font><br>
<font size="2" face="sans-serif">     new_value = old_value + d;</font><br>
<font size="2" face="sans-serif"> </font><br>
<font size="2" face="sans-serif">-    while ( ! __kmp_compare_and_store64 ( p, old_value, new_value ) )</font><br>
<font size="2" face="sans-serif">+    while ( ! KMP_COMPARE_AND_STORE_REL64 ( p, old_value, new_value ) )</font><br>
<font size="2" face="sans-serif">     {</font><br>
<font size="2" face="sans-serif">         KMP_CPU_PAUSE();</font><br>
<font size="2" face="sans-serif">         old_value = TCR_8( *p );</font><br>
<font size="2" face="sans-serif">@@ -533,7 +546,7 @@ __kmp_test_then_or64( volatile kmp_int64 *p, kmp_int64 d )</font><br>
<font size="2" face="sans-serif"> </font><br>
<font size="2" face="sans-serif">     old_value = TCR_8( *p );</font><br>
<font size="2" face="sans-serif">     new_value = old_value | d;</font><br>
<font size="2" face="sans-serif">-    while ( ! __kmp_compare_and_store64 ( p, old_value, new_value ) )</font><br>
<font size="2" face="sans-serif">+    while ( ! KMP_COMPARE_AND_STORE_REL64 ( p, old_value, new_value ) )</font><br>
<font size="2" face="sans-serif">     {</font><br>
<font size="2" face="sans-serif">         KMP_CPU_PAUSE();</font><br>
<font size="2" face="sans-serif">         old_value = TCR_8( *p );</font><br>
<font size="2" face="sans-serif">@@ -549,7 +562,7 @@ __kmp_test_then_and64( volatile kmp_int64 *p, kmp_int64 d )</font><br>
<font size="2" face="sans-serif"> </font><br>
<font size="2" face="sans-serif">     old_value = TCR_8( *p );</font><br>
<font size="2" face="sans-serif">     new_value = old_value & d;</font><br>
<font size="2" face="sans-serif">-    while ( ! __kmp_compare_and_store64 ( p, old_value, new_value ) )</font><br>
<font size="2" face="sans-serif">+    while ( ! KMP_COMPARE_AND_STORE_REL64 ( p, old_value, new_value ) )</font><br>
<font size="2" face="sans-serif">     {</font><br>
<font size="2" face="sans-serif">         KMP_CPU_PAUSE();</font><br>
<font size="2" face="sans-serif">         old_value = TCR_8( *p );</font><br>
<font size="2" face="sans-serif">@@ -2527,7 +2540,7 @@ __kmp_get_load_balance( int max )</font><br>
<font size="2" face="sans-serif"> #endif // USE_LOAD_BALANCE</font><br>
<font size="2" face="sans-serif"> </font><br>
<font size="2" face="sans-serif"> </font><br>
<font size="2" face="sans-serif">-#if KMP_COMPILER_GCC && !(KMP_ARCH_X86 || KMP_ARCH_X86_64)</font><br>
<font size="2" face="sans-serif">+#if KMP_COMPILER_GCC && !(KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_PPC64)</font><br>
<font size="2" face="sans-serif"> </font><br>
<font size="2" face="sans-serif"> int __kmp_invoke_microtask( microtask_t pkfn, int gtid, int tid, int argc,</font><br>
<font size="2" face="sans-serif">         void *p_argv[] )</font><br>
<font size="2" face="sans-serif">@@ -2561,7 +2574,89 @@ int __kmp_invoke_microtask( microtask_t pkfn, int gtid, int tid, int argc,</font><br>
<font size="2" face="sans-serif">     return 1;</font><br>
<font size="2" face="sans-serif"> }</font><br>
<font size="2" face="sans-serif"> </font><br>
<font size="2" face="sans-serif">-#endif // KMP_COMPILER_GCC && !(KMP_ARCH_X86 || KMP_ARCH_X86_64)</font><br>
<font size="2" face="sans-serif">+#endif // KMP_COMPILER_GCC && !(KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_PPC64)</font><br>
<font size="2" face="sans-serif">+</font><br>
<font size="2" face="sans-serif">+#if KMP_ARCH_PPC64</font><br>
<font size="2" face="sans-serif">+</font><br>
<font size="2" face="sans-serif">+// we really only need the case with 1 argument, because CLANG always build</font><br>
<font size="2" face="sans-serif">+// a struct of pointers to shared variables referenced in the outlined function</font><br>
<font size="2" face="sans-serif">+int</font><br>
<font size="2" face="sans-serif">+__kmp_invoke_microtask( microtask_t pkfn,</font><br>
<font size="2" face="sans-serif">+                        int gtid, int tid,</font><br>
<font size="2" face="sans-serif">+                        int argc, void *p_argv[] ) {</font><br>
<font size="2" face="sans-serif">+  switch (argc) {</font><br>
<font size="2" face="sans-serif">+  default:</font><br>
<font size="2" face="sans-serif">+    fprintf(stderr, "Too many args to microtask: %d!\n", argc);</font><br>
<font size="2" face="sans-serif">+    fflush(stderr);</font><br>
<font size="2" face="sans-serif">+    exit(-1);</font><br>
<font size="2" face="sans-serif">+  case 0:</font><br>
<font size="2" face="sans-serif">+    (*pkfn)(&gtid, &tid);</font><br>
<font size="2" face="sans-serif">+    break;</font><br>
<font size="2" face="sans-serif">+  case 1:</font><br>
<font size="2" face="sans-serif">+    (*pkfn)(&gtid, &tid, p_argv[0]);</font><br>
<font size="2" face="sans-serif">+    break;</font><br>
<font size="2" face="sans-serif">+  case 2:</font><br>
<font size="2" face="sans-serif">+    (*pkfn)(&gtid, &tid, p_argv[0], p_argv[1]);</font><br>
<font size="2" face="sans-serif">+    break;</font><br>
<font size="2" face="sans-serif">+  case 3:</font><br>
<font size="2" face="sans-serif">+    (*pkfn)(&gtid, &tid, p_argv[0], p_argv[1], p_argv[2]);</font><br>
<font size="2" face="sans-serif">+    break;</font><br>
<font size="2" face="sans-serif">+  case 4:</font><br>
<font size="2" face="sans-serif">+    (*pkfn)(&gtid, &tid, p_argv[0], p_argv[1], p_argv[2], p_argv[3]);</font><br>
<font size="2" face="sans-serif">+    break;</font><br>
<font size="2" face="sans-serif">+  case 5:</font><br>
<font size="2" face="sans-serif">+    (*pkfn)(&gtid, &tid, p_argv[0], p_argv[1], p_argv[2], p_argv[3], p_argv[4]);</font><br>
<font size="2" face="sans-serif">+    break;</font><br>
<font size="2" face="sans-serif">+  case 6:</font><br>
<font size="2" face="sans-serif">+    (*pkfn)(&gtid, &tid, p_argv[0], p_argv[1], p_argv[2], p_argv[3], p_argv[4],</font><br>
<font size="2" face="sans-serif">+            p_argv[5]);</font><br>
<font size="2" face="sans-serif">+    break;</font><br>
<font size="2" face="sans-serif">+  case 7:</font><br>
<font size="2" face="sans-serif">+    (*pkfn)(&gtid, &tid, p_argv[0], p_argv[1], p_argv[2], p_argv[3], p_argv[4],</font><br>
<font size="2" face="sans-serif">+            p_argv[5], p_argv[6]);</font><br>
<font size="2" face="sans-serif">+    break;</font><br>
<font size="2" face="sans-serif">+  case 8:</font><br>
<font size="2" face="sans-serif">+    (*pkfn)(&gtid, &tid, p_argv[0], p_argv[1], p_argv[2], p_argv[3], p_argv[4],</font><br>
<font size="2" face="sans-serif">+            p_argv[5], p_argv[6], p_argv[7]);</font><br>
<font size="2" face="sans-serif">+    break;</font><br>
<font size="2" face="sans-serif">+  case 9:</font><br>
<font size="2" face="sans-serif">+    (*pkfn)(&gtid, &tid, p_argv[0], p_argv[1], p_argv[2], p_argv[3], p_argv[4],</font><br>
<font size="2" face="sans-serif">+            p_argv[5], p_argv[6], p_argv[7], p_argv[8]);</font><br>
<font size="2" face="sans-serif">+    break;</font><br>
<font size="2" face="sans-serif">+  case 10:</font><br>
<font size="2" face="sans-serif">+    (*pkfn)(&gtid, &tid, p_argv[0], p_argv[1], p_argv[2], p_argv[3], p_argv[4],</font><br>
<font size="2" face="sans-serif">+            p_argv[5], p_argv[6], p_argv[7], p_argv[8], p_argv[9]);</font><br>
<font size="2" face="sans-serif">+    break;</font><br>
<font size="2" face="sans-serif">+  case 11:</font><br>
<font size="2" face="sans-serif">+    (*pkfn)(&gtid, &tid, p_argv[0], p_argv[1], p_argv[2], p_argv[3], p_argv[4],</font><br>
<font size="2" face="sans-serif">+            p_argv[5], p_argv[6], p_argv[7], p_argv[8], p_argv[9], p_argv[10]);</font><br>
<font size="2" face="sans-serif">+    break;</font><br>
<font size="2" face="sans-serif">+  case 12:</font><br>
<font size="2" face="sans-serif">+    (*pkfn)(&gtid, &tid, p_argv[0], p_argv[1], p_argv[2], p_argv[3], p_argv[4],</font><br>
<font size="2" face="sans-serif">+            p_argv[5], p_argv[6], p_argv[7], p_argv[8], p_argv[9], p_argv[10],</font><br>
<font size="2" face="sans-serif">+            p_argv[11]);</font><br>
<font size="2" face="sans-serif">+    break;</font><br>
<font size="2" face="sans-serif">+  case 13:</font><br>
<font size="2" face="sans-serif">+    (*pkfn)(&gtid, &tid, p_argv[0], p_argv[1], p_argv[2], p_argv[3], p_argv[4],</font><br>
<font size="2" face="sans-serif">+            p_argv[5], p_argv[6], p_argv[7], p_argv[8], p_argv[9], p_argv[10],</font><br>
<font size="2" face="sans-serif">+            p_argv[11], p_argv[12]);</font><br>
<font size="2" face="sans-serif">+    break;</font><br>
<font size="2" face="sans-serif">+  case 14:</font><br>
<font size="2" face="sans-serif">+    (*pkfn)(&gtid, &tid, p_argv[0], p_argv[1], p_argv[2], p_argv[3], p_argv[4],</font><br>
<font size="2" face="sans-serif">+            p_argv[5], p_argv[6], p_argv[7], p_argv[8], p_argv[9], p_argv[10],</font><br>
<font size="2" face="sans-serif">+            p_argv[11], p_argv[12], p_argv[13]);</font><br>
<font size="2" face="sans-serif">+    break;</font><br>
<font size="2" face="sans-serif">+  case 15:</font><br>
<font size="2" face="sans-serif">+    (*pkfn)(&gtid, &tid, p_argv[0], p_argv[1], p_argv[2], p_argv[3], p_argv[4],</font><br>
<font size="2" face="sans-serif">+            p_argv[5], p_argv[6], p_argv[7], p_argv[8], p_argv[9], p_argv[10],</font><br>
<font size="2" face="sans-serif">+            p_argv[11], p_argv[12], p_argv[13], p_argv[14]);</font><br>
<font size="2" face="sans-serif">+    break;</font><br>
<font size="2" face="sans-serif">+  }</font><br>
<font size="2" face="sans-serif">+</font><br>
<font size="2" face="sans-serif">+  return 1;</font><br>
<font size="2" face="sans-serif">+}</font><br>
<font size="2" face="sans-serif">+</font><br>
<font size="2" face="sans-serif">+#endif</font><br>
<font size="2" face="sans-serif"> </font><br>
<font size="2" face="sans-serif"> // end of file //</font><br>
<font size="2" face="sans-serif"> </font><br>
<font size="2" face="sans-serif">diff --git a/runtime/tools/lib/Platform.pm b/runtime/tools/lib/Platform.pm</font><br>
<font size="2" face="sans-serif">index 5b399f7..763f3cb 100644</font><br>
<font size="2" face="sans-serif">--- a/runtime/tools/lib/Platform.pm</font><br>
<font size="2" face="sans-serif">+++ b/runtime/tools/lib/Platform.pm</font><br>
<font size="2" face="sans-serif">@@ -50,6 +50,8 @@ sub canon_arch($) {</font><br>
<font size="2" face="sans-serif">             $arch = "32e";</font><br>
<font size="2" face="sans-serif">         } elsif ( $arch =~ m{\Aarm(?:v7\D*)?\z} ) {</font><br>
<font size="2" face="sans-serif">             $arch = "arm";</font><br>
<font size="2" face="sans-serif">+        } elsif ( $arch =~ m{\Appc64} ) {</font><br>
<font size="2" face="sans-serif">+                $arch = "ppc64";</font><br>
<font size="2" face="sans-serif">         } else {</font><br>
<font size="2" face="sans-serif">             $arch = undef;</font><br>
<font size="2" face="sans-serif">         }; # if</font><br>
<font size="2" face="sans-serif">@@ -62,6 +64,7 @@ sub canon_arch($) {</font><br>
<font size="2" face="sans-serif">         "32"  => "IA-32 architecture",</font><br>
<font size="2" face="sans-serif">         "32e" => "Intel(R) 64",</font><br>
<font size="2" face="sans-serif">         "arm" => "ARM",</font><br>
<font size="2" face="sans-serif">+        "ppc64" => "PPC64",</font><br>
<font size="2" face="sans-serif">     );</font><br>
<font size="2" face="sans-serif"> </font><br>
<font size="2" face="sans-serif">     sub legal_arch($) {</font><br>
<font size="2" face="sans-serif">@@ -159,6 +162,8 @@ sub target_options() {</font><br>
<font size="2" face="sans-serif">         $_host_arch = "32e";</font><br>
<font size="2" face="sans-serif">     } elsif ( $hardware_platform eq "arm" ) {</font><br>
<font size="2" face="sans-serif">         $_host_arch = "arm";</font><br>
<font size="2" face="sans-serif">+    } elsif ( $hardware_platform eq "ppc64" ) {</font><br>
<font size="2" face="sans-serif">+        $_host_arch = "ppc64";</font><br>
<font size="2" face="sans-serif">     } else {</font><br>
<font size="2" face="sans-serif">         die "Unsupported host hardware platform: \"$hardware_platform\"; stopped";</font><br>
<font size="2" face="sans-serif">     }; # if</font><br>
<font size="2" face="sans-serif">diff --git a/runtime/tools/lib/Uname.pm b/runtime/tools/lib/Uname.pm</font><br>
<font size="2" face="sans-serif">index e212501..52518b4 100644</font><br>
<font size="2" face="sans-serif">--- a/runtime/tools/lib/Uname.pm</font><br>
<font size="2" face="sans-serif">+++ b/runtime/tools/lib/Uname.pm</font><br>
<font size="2" face="sans-serif">@@ -147,6 +147,8 @@ if ( 0 ) {</font><br>
<font size="2" face="sans-serif">         $values{ hardware_platform } = "x86_64";</font><br>
<font size="2" face="sans-serif">     } elsif ( $values{ machine } =~ m{\Aarmv7\D*\z} ) {</font><br>
<font size="2" face="sans-serif">         $values{ hardware_platform } = "arm";</font><br>
<font size="2" face="sans-serif">+    } elsif ( $values{ machine } =~ m{\Appc64\z} ) {</font><br>
<font size="2" face="sans-serif">+        $values{ hardware_platform } = "ppc64";</font><br>
<font size="2" face="sans-serif">     } else {</font><br>
<font size="2" face="sans-serif">         die "Unsupported machine (\"$values{ machine }\") returned by POSIX::uname(); stopped";</font><br>
<font size="2" face="sans-serif">     }; # if</font><br>
<font size="2" face="sans-serif">diff --git a/runtime/tools/src/common-defs.mk b/runtime/tools/src/common-defs.mk</font><br>
<font size="2" face="sans-serif">index ebd1922..7eb64b0 100644</font><br>
<font size="2" face="sans-serif">--- a/runtime/tools/src/common-defs.mk</font><br>
<font size="2" face="sans-serif">+++ b/runtime/tools/src/common-defs.mk</font><br>
<font size="2" face="sans-serif">@@ -45,7 +45,7 @@ endif</font><br>
<font size="2" face="sans-serif"> # Description:</font><br>
<font size="2" face="sans-serif"> #     The function return printable name of specified architecture, IA-32 architecture or Intel(R) 64.</font><br>
<font size="2" face="sans-serif"> #</font><br>
<font size="2" face="sans-serif">-legal_arch = $(if $(filter 32,$(1)),IA-32,$(if $(filter 32e,$(1)),Intel(R) 64,$(if $(filter l1,$(1)),L1OM,$(if $(filter arm,$(1)),ARM,$(error Bad architecture specified: $(1))))))</font><br>
<font size="2" face="sans-serif">+legal_arch = $(if $(filter 32,$(1)),IA-32,$(if $(filter 32e,$(1)),Intel(R) 64,$(if $(filter l1,$(1)),L1OM,$(if $(filter arm,$(1)),ARM,$(if $(filter ppc64,$(1)),PPC64,$(error Bad architecture specified: $(1)))))))</font><br>
<font size="2" face="sans-serif"> </font><br>
<font size="2" face="sans-serif"> # Synopsis:</font><br>
<font size="2" face="sans-serif"> #     var_name = $(call check_variable,var,list)</font><br>
<font size="2" face="sans-serif">@@ -128,9 +128,9 @@ endif</font><br>
<font size="2" face="sans-serif"> # --------------------------------------------------------------------------------------------------</font><br>
<font size="2" face="sans-serif"> </font><br>
<font size="2" face="sans-serif"> os       := $(call check_variable,os,lin lrb mac win)</font><br>
<font size="2" face="sans-serif">-arch     := $(call check_variable,arch,32 32e 64 arm)</font><br>
<font size="2" face="sans-serif">+arch     := $(call check_variable,arch,32 32e 64 arm ppc64)</font><br>
<font size="2" face="sans-serif"> platform := $(os)_$(arch)</font><br>
<font size="2" face="sans-serif">-platform := $(call check_variable,platform,lin_32 lin_32e lin_64 lin_arm lrb_32e mac_32 mac_32e win_32 win_32e win_64)</font><br>
<font size="2" face="sans-serif">+platform := $(call check_variable,platform,lin_32 lin_32e lin_64 lin_arm lrb_32e mac_32 mac_32e win_32 win_32e win_64 lin_ppc64)</font><br>
<font size="2" face="sans-serif"> # oa-opts means "os and arch options". They are passed to almost all perl scripts.</font><br>
<font size="2" face="sans-serif"> oa-opts  := --os=$(os) --arch=$(arch)</font><br>
<font size="2" face="sans-serif"> </font><br>
<font size="2" face="sans-serif">diff --git a/runtime/tools/src/common-tools.mk b/runtime/tools/src/common-tools.mk</font><br>
<font size="2" face="sans-serif">index a9c9fbc..8c86791 100644</font><br>
<font size="2" face="sans-serif">--- a/runtime/tools/src/common-tools.mk</font><br>
<font size="2" face="sans-serif">+++ b/runtime/tools/src/common-tools.mk</font><br>
<font size="2" face="sans-serif">@@ -34,7 +34,7 @@</font><br>
<font size="2" face="sans-serif"> # "No rule to build .\kmp_i18n.inc". Using "./" solves the problem.</font><br>
<font size="2" face="sans-serif"> cpp-flags += -I ./</font><br>
<font size="2" face="sans-serif"> # For non-x86 architecture</font><br>
<font size="2" face="sans-serif">-ifeq "$(filter 32 32e 64,$(arch))" ""</font><br>
<font size="2" face="sans-serif">+ifeq "$(filter 32 32e 64 ppc64,$(arch))" ""</font><br>
<font size="2" face="sans-serif">     cpp-flags += $(shell pkg-config --cflags libffi)</font><br>
<font size="2" face="sans-serif"> endif</font><br>
<font size="2" face="sans-serif"> # Add all VPATH directories to path for searching include files.</font><br>
</body></html>