Update to latest PMIx v2.1.0a
Signed-off-by: Ralph Castain <rhc@open-mpi.org>
Этот коммит содержится в:
родитель
03544d7cfa
Коммит
4290247d64
@ -30,7 +30,7 @@ greek=
|
||||
# command, or with the date (if "git describe" fails) in the form of
|
||||
# "date<date>".
|
||||
|
||||
repo_rev=git59f8ecb
|
||||
repo_rev=gite38cd0a
|
||||
|
||||
# If tarball_version is not empty, it is used as the version string in
|
||||
# the tarball filename, regardless of all other versions listed in
|
||||
@ -44,7 +44,7 @@ tarball_version=
|
||||
|
||||
# The date when this release was created
|
||||
|
||||
date="Jul 21, 2017"
|
||||
date="Aug 10, 2017"
|
||||
|
||||
# The shared library version of each of PMIx's public libraries.
|
||||
# These versions are maintained in accordance with the "Library
|
||||
|
@ -757,7 +757,6 @@ AC_DEFUN([PMIX_SETUP_CORE],[
|
||||
pmix_config_prefix[Makefile]
|
||||
pmix_config_prefix[config/Makefile]
|
||||
pmix_config_prefix[include/Makefile]
|
||||
pmix_config_prefix[src/atomics/asm/Makefile]
|
||||
pmix_config_prefix[src/Makefile]
|
||||
pmix_config_prefix[src/util/keyval/Makefile]
|
||||
pmix_config_prefix[src/mca/base/Makefile]
|
||||
@ -937,25 +936,6 @@ AC_DEFINE_UNQUOTED([PMIX_WANT_PRETTY_PRINT_STACKTRACE],
|
||||
[$WANT_PRETTY_PRINT_STACKTRACE],
|
||||
[if want pretty-print stack trace feature])
|
||||
|
||||
#
|
||||
# Do we want the shared memory datastore usage?
|
||||
#
|
||||
|
||||
AC_MSG_CHECKING([if want shared memory datastore])
|
||||
AC_ARG_ENABLE([dstore],
|
||||
[AC_HELP_STRING([--disable-dstore],
|
||||
[Using shared memory datastore (default: enabled)])])
|
||||
if test "$enable_dstore" = "no" ; then
|
||||
AC_MSG_RESULT([no])
|
||||
WANT_DSTORE=0
|
||||
else
|
||||
AC_MSG_RESULT([yes])
|
||||
WANT_DSTORE=1
|
||||
fi
|
||||
AC_DEFINE_UNQUOTED([PMIX_ENABLE_DSTORE],
|
||||
[$WANT_DSTORE],
|
||||
[if want shared memory dstore feature])
|
||||
|
||||
#
|
||||
# Use pthread-based locking
|
||||
#
|
||||
|
@ -55,7 +55,6 @@ AC_DEFUN([PMIX_CHECK_DSTOR_LOCK],[
|
||||
if test "$_x_ac_fcntl_lock_found" = "0"; then
|
||||
AC_MSG_ERROR([dstore: no available locking mechanisms was found. Can not continue. Try disabling dstore])
|
||||
fi
|
||||
LIBS="$orig_libs"
|
||||
fi
|
||||
|
||||
LIBS="$orig_libs"
|
||||
])
|
||||
|
@ -12,6 +12,7 @@
|
||||
# All rights reserved.
|
||||
# Copyright (c) 2006-2015 Cisco Systems, Inc. All rights reserved.
|
||||
# Copyright (c) 2009-2011 Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2017 Intel, Inc. All rights reserved.
|
||||
# $COPYRIGHT$
|
||||
#
|
||||
# Additional copyrights may follow
|
||||
@ -86,7 +87,7 @@ AC_DEFUN([PMIX_CHECK_VISIBILITY],[
|
||||
unset pmix_add
|
||||
fi
|
||||
|
||||
AC_DEFINE_UNQUOTED([PMIX_C_HAVE_VISIBILITY], [$WANT_VISIBILITY],
|
||||
AC_DEFINE_UNQUOTED([PMIX_HAVE_VISIBILITY], [$WANT_VISIBILITY],
|
||||
[Whether C compiler supports symbol visibility or not])
|
||||
AM_CONDITIONAL([WANT_HIDDEN],[test "$WANT_VISIBILITY" = "1"])
|
||||
])
|
||||
|
@ -13,7 +13,7 @@ dnl Copyright (c) 2008-2015 Cisco Systems, Inc. All rights reserved.
|
||||
dnl Copyright (c) 2010 Oracle and/or its affiliates. All rights reserved.
|
||||
dnl Copyright (c) 2015-2017 Research Organization for Information Science
|
||||
dnl and Technology (RIST). All rights reserved.
|
||||
dnl Copyright (c) 2014-2016 Los Alamos National Security, LLC. All rights
|
||||
dnl Copyright (c) 2014-2017 Los Alamos National Security, LLC. All rights
|
||||
dnl reserved.
|
||||
dnl Copyright (c) 2017 Amazon.com, Inc. or its affiliates. All Rights
|
||||
dnl reserved.
|
||||
@ -194,9 +194,15 @@ AC_DEFUN([PMIX_CHECK_GCC_BUILTIN_CSWAP_INT128], [
|
||||
AC_DEFUN([PMIX_CHECK_GCC_ATOMIC_BUILTINS], [
|
||||
AC_MSG_CHECKING([for __atomic builtin atomics])
|
||||
|
||||
AC_TRY_LINK([long tmp, old = 0;], [__atomic_thread_fence(__ATOMIC_SEQ_CST);
|
||||
AC_TRY_LINK([
|
||||
#include <stdint.h>
|
||||
uint32_t tmp, old = 0;
|
||||
uint64_t tmp64, old64 = 0;], [
|
||||
__atomic_thread_fence(__ATOMIC_SEQ_CST);
|
||||
__atomic_compare_exchange_n(&tmp, &old, 1, 0, __ATOMIC_RELAXED, __ATOMIC_RELAXED);
|
||||
__atomic_add_fetch(&tmp, 1, __ATOMIC_RELAXED);],
|
||||
__atomic_add_fetch(&tmp, 1, __ATOMIC_RELAXED);
|
||||
__atomic_compare_exchange_n(&tmp64, &old64, 1, 0, __ATOMIC_RELAXED, __ATOMIC_RELAXED);
|
||||
__atomic_add_fetch(&tmp64, 1, __ATOMIC_RELAXED);],
|
||||
[AC_MSG_RESULT([yes])
|
||||
$1],
|
||||
[AC_MSG_RESULT([no])
|
||||
@ -879,6 +885,7 @@ return ret;
|
||||
|
||||
if test "$asm_result" = "yes" ; then
|
||||
PMIX_C_GCC_INLINE_ASSEMBLY=1
|
||||
pmix_cv_asm_inline_supported="yes"
|
||||
else
|
||||
PMIX_C_GCC_INLINE_ASSEMBLY=0
|
||||
fi
|
||||
@ -890,70 +897,6 @@ return ret;
|
||||
unset PMIX_C_GCC_INLINE_ASSEMBLY assembly asm_result
|
||||
])dnl
|
||||
|
||||
|
||||
dnl #################################################################
|
||||
dnl
|
||||
dnl PMIX_CHECK_INLINE_DEC
|
||||
dnl
|
||||
dnl DEFINE PMIX_DEC to 0 or 1 depending on DEC
|
||||
dnl support
|
||||
dnl
|
||||
dnl #################################################################
|
||||
AC_DEFUN([PMIX_CHECK_INLINE_C_DEC],[
|
||||
|
||||
AC_MSG_CHECKING([if $CC supports DEC inline assembly])
|
||||
|
||||
AC_LINK_IFELSE([AC_LANG_PROGRAM([
|
||||
AC_INCLUDES_DEFAULT
|
||||
#include <c_asm.h>],
|
||||
[[asm("");
|
||||
return 0;]])],
|
||||
[asm_result="yes"], [asm_result="no"])
|
||||
|
||||
AC_MSG_RESULT([$asm_result])
|
||||
|
||||
if test "$asm_result" = "yes" ; then
|
||||
PMIX_C_DEC_INLINE_ASSEMBLY=1
|
||||
else
|
||||
PMIX_C_DEC_INLINE_ASSEMBLY=0
|
||||
fi
|
||||
|
||||
AC_DEFINE_UNQUOTED([PMIX_C_DEC_INLINE_ASSEMBLY],
|
||||
[$PMIX_C_DEC_INLINE_ASSEMBLY],
|
||||
[Whether C compiler supports DEC style inline assembly])
|
||||
|
||||
unset PMIX_C_DEC_INLINE_ASSEMBLY asm_result
|
||||
])dnl
|
||||
|
||||
|
||||
dnl #################################################################
|
||||
dnl
|
||||
dnl PMIX_CHECK_INLINE_XLC
|
||||
dnl
|
||||
dnl DEFINE PMIX_XLC to 0 or 1 depending on XLC
|
||||
dnl support
|
||||
dnl
|
||||
dnl #################################################################
|
||||
AC_DEFUN([PMIX_CHECK_INLINE_C_XLC],[
|
||||
|
||||
AC_MSG_CHECKING([if $CC supports XLC inline assembly])
|
||||
|
||||
PMIX_C_XLC_INLINE_ASSEMBLY=0
|
||||
asm_result="no"
|
||||
if test "$CC" = "xlc" ; then
|
||||
PMIX_XLC_INLINE_ASSEMBLY=1
|
||||
asm_result="yes"
|
||||
fi
|
||||
|
||||
AC_MSG_RESULT([$asm_result])
|
||||
AC_DEFINE_UNQUOTED([PMIX_C_XLC_INLINE_ASSEMBLY],
|
||||
[$PMIX_C_XLC_INLINE_ASSEMBLY],
|
||||
[Whether C compiler supports XLC style inline assembly])
|
||||
|
||||
unset PMIX_C_XLC_INLINE_ASSEMBLY
|
||||
])dnl
|
||||
|
||||
|
||||
dnl #################################################################
|
||||
dnl
|
||||
dnl PMIX_CONFIG_ASM
|
||||
@ -975,12 +918,12 @@ AC_DEFUN([PMIX_CONFIG_ASM],[
|
||||
[], [enable_builtin_atomics="yes"])
|
||||
|
||||
pmix_cv_asm_builtin="BUILTIN_NO"
|
||||
if test "$pmix_cv_asm_builtin" = "BUILTIN_NO" && test "$enable_builtin_atomics" = "yes" ; then
|
||||
PMIX_CHECK_GCC_ATOMIC_BUILTINS([pmix_cv_asm_builtin="BUILTIN_GCC"], [])
|
||||
fi
|
||||
if test "$pmix_cv_asm_builtin" = "BUILTIN_NO" && test "$enable_builtin_atomics" = "yes" ; then
|
||||
PMIX_CHECK_SYNC_BUILTINS([pmix_cv_asm_builtin="BUILTIN_SYNC"], [])
|
||||
fi
|
||||
AS_IF([test "$pmix_cv_asm_builtin" = "BUILTIN_NO" && test "$enable_builtin_atomics" != "no"],
|
||||
[PMIX_CHECK_GCC_ATOMIC_BUILTINS([pmix_cv_asm_builtin="BUILTIN_GCC"], [])])
|
||||
AS_IF([test "$pmix_cv_asm_builtin" = "BUILTIN_NO" && test "$enable_builtin_atomics" != "no"],
|
||||
[PMIX_CHECK_SYNC_BUILTINS([pmix_cv_asm_builtin="BUILTIN_SYNC"], [])])
|
||||
AS_IF([test "$pmix_cv_asm_builtin" = "BUILTIN_NO" && test "$enable_builtin_atomics" = "yes"],
|
||||
[AC_MSG_WARN([__sync builtin atomics requested but not found - proceeding with inline atomics])])
|
||||
|
||||
PMIX_CHECK_ASM_PROC
|
||||
PMIX_CHECK_ASM_TEXT
|
||||
@ -1084,17 +1027,19 @@ AC_DEFUN([PMIX_CONFIG_ASM],[
|
||||
fi
|
||||
PMIX_GCC_INLINE_ASSIGN='"1: li %0,0" : "=&r"(ret)'
|
||||
;;
|
||||
|
||||
# There is no current difference between s390 and s390x
|
||||
# But use two different defines in case some come later
|
||||
# as s390 is 31bits while s390x is 64bits
|
||||
s390-*)
|
||||
pmix_cv_asm_arch="S390"
|
||||
PMIX_CHECK_SYNC_BUILTINS([pmix_cv_asm_builtin="BUILTIN_SYNC"],
|
||||
[AC_MSG_ERROR([No atomic primitives available for $host])])
|
||||
;;
|
||||
s390x-*)
|
||||
pmix_cv_asm_arch="S390X"
|
||||
PMIX_CHECK_SYNC_BUILTINS([pmix_cv_asm_builtin="BUILTIN_SYNC"],
|
||||
[AC_MSG_ERROR([No atomic primitives available for $host])])
|
||||
;;
|
||||
|
||||
sparc*-*)
|
||||
# SPARC v9 (and above) are the only ones with 64bit support
|
||||
# if compiling 32 bit, see if we are v9 (aka v8plus) or
|
||||
@ -1156,10 +1101,9 @@ AC_MSG_ERROR([Can not continue.])
|
||||
;;
|
||||
esac
|
||||
|
||||
pmix_cv_asm_inline_supported="no"
|
||||
# now that we know our architecture, try to inline assemble
|
||||
PMIX_CHECK_INLINE_C_GCC([$PMIX_GCC_INLINE_ASSIGN])
|
||||
PMIX_CHECK_INLINE_C_DEC
|
||||
PMIX_CHECK_INLINE_C_XLC
|
||||
|
||||
# format:
|
||||
# config_file-text-global-label_suffix-gsym-lsym-type-size-align_log-ppc_r_reg-64_bit-gnu_stack
|
||||
@ -1244,64 +1188,10 @@ AC_DEFUN([PMIX_ASM_FIND_FILE], [
|
||||
AC_REQUIRE([AC_PROG_GREP])
|
||||
AC_REQUIRE([AC_PROG_FGREP])
|
||||
|
||||
if test "$pmix_cv_asm_arch" != "WINDOWS" && test "$pmix_cv_asm_builtin" != "BUILTIN_SYNC" && test "$pmix_cv_asm_builtin" != "BUILTIN_GCC" && test "$pmix_cv_asm_builtin" != "BUILTIN_OSX" ; then
|
||||
# see if we have a pre-built one already
|
||||
AC_MSG_CHECKING([for pre-built assembly file])
|
||||
pmix_cv_asm_file=""
|
||||
if $GREP "$pmix_cv_asm_arch" "${PMIX_TOP_SRCDIR}/src/atomics/asm/asm-data.txt" | $FGREP "$pmix_cv_asm_format" >conftest.out 2>&1 ; then
|
||||
pmix_cv_asm_file="`cut -f3 conftest.out`"
|
||||
if test ! "$pmix_cv_asm_file" = "" ; then
|
||||
pmix_cv_asm_file="atomic-${pmix_cv_asm_file}.s"
|
||||
if test -f "${PMIX_TOP_SRCDIR}/src/atomics/asm/generated/${pmix_cv_asm_file}" ; then
|
||||
AC_MSG_RESULT([yes ($pmix_cv_asm_file)])
|
||||
else
|
||||
AC_MSG_RESULT([no ($pmix_cv_asm_file not found)])
|
||||
pmix_cv_asm_file=""
|
||||
fi
|
||||
fi
|
||||
else
|
||||
AC_MSG_RESULT([no (not in asm-data)])
|
||||
fi
|
||||
rm -rf conftest.*
|
||||
|
||||
if test "$pmix_cv_asm_file" = "" ; then
|
||||
# Can we generate a file?
|
||||
AC_MSG_CHECKING([whether possible to generate assembly file])
|
||||
mkdir -p pmix/asm/generated
|
||||
pmix_cv_asm_file="atomic-local.s"
|
||||
pmix_try='$PERL $PMIX_TOP_SRCDIR/src/atomics/asm/generate-asm.pl $pmix_cv_asm_arch "$pmix_cv_asm_format" $PMIX_TOP_SRCDIR/src/atomics/asm/base $PMIX_TOP_BUILDDIR/src/atomics/asm/generated/$pmix_cv_asm_file >conftest.out 2>&1'
|
||||
if AC_TRY_EVAL(pmix_try) ; then
|
||||
# save the warnings
|
||||
cat conftest.out >&AC_FD_CC
|
||||
AC_MSG_RESULT([yes])
|
||||
else
|
||||
# save output
|
||||
cat conftest.out >&AC_FD_CC
|
||||
pmix_cv_asm_file=""
|
||||
AC_MSG_RESULT([failed])
|
||||
AC_MSG_WARN([Could not build atomic operations assembly file.])
|
||||
AC_MSG_WARN([There will be no atomic operations for this build.])
|
||||
fi
|
||||
fi
|
||||
rm -rf conftest.*
|
||||
if test "$pmix_cv_asm_arch" != "WINDOWS" && test "$pmix_cv_asm_builtin" != "BUILTIN_SYNC" && test "$pmix_cv_asm_builtin" != "BUILTIN_GCC" && test "$pmix_cv_asm_builtin" != "BUILTIN_OSX" && test "$pmix_cv_asm_inline_arch" = "no" ; then
|
||||
AC_MSG_ERROR([no atomic support available. exiting])
|
||||
else
|
||||
# On windows with VC++, atomics are done with compiler primitives
|
||||
pmix_cv_asm_file=""
|
||||
fi
|
||||
|
||||
AC_MSG_CHECKING([for atomic assembly filename])
|
||||
if test "$pmix_cv_asm_file" = "" ; then
|
||||
AC_MSG_RESULT([none])
|
||||
result=0
|
||||
else
|
||||
AC_MSG_RESULT([$pmix_cv_asm_file])
|
||||
result=1
|
||||
fi
|
||||
|
||||
AC_DEFINE_UNQUOTED([PMIX_HAVE_ASM_FILE], [$result],
|
||||
[Whether there is an atomic assembly file available])
|
||||
AM_CONDITIONAL([PMIX_HAVE_ASM_FILE], [test "$result" = "1"])
|
||||
|
||||
PMIX_ASM_FILE=$pmix_cv_asm_file
|
||||
AC_SUBST(PMIX_ASM_FILE)
|
||||
])dnl
|
||||
|
@ -48,6 +48,12 @@
|
||||
#ifndef PMI_H
|
||||
#define PMI_H
|
||||
|
||||
#ifdef PMIX_HAVE_VISIBILITY
|
||||
#define PMIX_EXPORT __attribute__((__visibility__("default")))
|
||||
#else
|
||||
#define PMIX_EXPORT
|
||||
#endif
|
||||
|
||||
/* prototypes for the PMI interface in MPICH2 */
|
||||
|
||||
#if defined(__cplusplus)
|
||||
@ -119,7 +125,7 @@ this process was created by 'PMI_Spawn_multiple'. 'spawned' will be 'PMI_TRUE'
|
||||
this process group has a parent and 'PMI_FALSE' if it does not.
|
||||
|
||||
@*/
|
||||
int PMI_Init( int *spawned );
|
||||
PMIX_EXPORT int PMI_Init( int *spawned );
|
||||
|
||||
/*@
|
||||
PMI_Initialized - check if PMI has been initialized
|
||||
@ -139,7 +145,7 @@ On successful output, initialized will either be 'PMI_TRUE' or 'PMI_FALSE'.
|
||||
- PMI_FALSE - initialize has not been called or previously failed.
|
||||
|
||||
@*/
|
||||
int PMI_Initialized( PMI_BOOL *initialized );
|
||||
PMIX_EXPORT int PMI_Initialized( PMI_BOOL *initialized );
|
||||
|
||||
/*@
|
||||
PMI_Finalize - finalize the Process Manager Interface
|
||||
@ -152,7 +158,7 @@ Notes:
|
||||
Finalize PMI for this process group.
|
||||
|
||||
@*/
|
||||
int PMI_Finalize( void );
|
||||
PMIX_EXPORT int PMI_Finalize( void );
|
||||
|
||||
/*@
|
||||
PMI_Get_size - obtain the size of the process group
|
||||
@ -170,7 +176,7 @@ This function returns the size of the process group to which the local process
|
||||
belongs.
|
||||
|
||||
@*/
|
||||
int PMI_Get_size( int *size );
|
||||
PMIX_EXPORT int PMI_Get_size( int *size );
|
||||
|
||||
/*@
|
||||
PMI_Get_rank - obtain the rank of the local process in the process group
|
||||
@ -187,7 +193,7 @@ Notes:
|
||||
This function returns the rank of the local process in its process group.
|
||||
|
||||
@*/
|
||||
int PMI_Get_rank( int *rank );
|
||||
PMIX_EXPORT int PMI_Get_rank( int *rank );
|
||||
|
||||
/*@
|
||||
PMI_Get_universe_size - obtain the universe size
|
||||
@ -202,7 +208,7 @@ Return values:
|
||||
|
||||
|
||||
@*/
|
||||
int PMI_Get_universe_size( int *size );
|
||||
PMIX_EXPORT int PMI_Get_universe_size( int *size );
|
||||
|
||||
/*@
|
||||
PMI_Get_appnum - obtain the application number
|
||||
@ -217,7 +223,7 @@ Return values:
|
||||
|
||||
|
||||
@*/
|
||||
int PMI_Get_appnum( int *appnum );
|
||||
PMIX_EXPORT int PMI_Get_appnum( int *appnum );
|
||||
|
||||
/*@
|
||||
PMI_Publish_name - publish a name
|
||||
@ -233,7 +239,7 @@ Return values:
|
||||
|
||||
|
||||
@*/
|
||||
int PMI_Publish_name( const char service_name[], const char port[] );
|
||||
PMIX_EXPORT int PMI_Publish_name( const char service_name[], const char port[] );
|
||||
|
||||
/*@
|
||||
PMI_Unpublish_name - unpublish a name
|
||||
@ -248,7 +254,7 @@ Return values:
|
||||
|
||||
|
||||
@*/
|
||||
int PMI_Unpublish_name( const char service_name[] );
|
||||
PMIX_EXPORT int PMI_Unpublish_name( const char service_name[] );
|
||||
|
||||
/*@
|
||||
PMI_Lookup_name - lookup a service by name
|
||||
@ -266,7 +272,7 @@ Return values:
|
||||
|
||||
|
||||
@*/
|
||||
int PMI_Lookup_name( const char service_name[], char port[] );
|
||||
PMIX_EXPORT int PMI_Lookup_name( const char service_name[], char port[] );
|
||||
|
||||
/*@
|
||||
PMI_Get_id - obtain the id of the process group
|
||||
@ -289,7 +295,7 @@ that the local process belongs to. The string passed in must be at least
|
||||
as long as the number returned by 'PMI_Get_id_length_max()'.
|
||||
|
||||
@*/
|
||||
int PMI_Get_id( char id_str[], int length );
|
||||
PMIX_EXPORT int PMI_Get_id( char id_str[], int length );
|
||||
|
||||
/*@
|
||||
PMI_Get_kvs_domain_id - obtain the id of the PMI domain
|
||||
@ -312,7 +318,7 @@ where keyval spaces can be shared. The string passed in must be at least
|
||||
as long as the number returned by 'PMI_Get_id_length_max()'.
|
||||
|
||||
@*/
|
||||
int PMI_Get_kvs_domain_id( char id_str[], int length );
|
||||
PMIX_EXPORT int PMI_Get_kvs_domain_id( char id_str[], int length );
|
||||
|
||||
/*@
|
||||
PMI_Get_id_length_max - obtain the maximum length of an id string
|
||||
@ -329,7 +335,7 @@ Notes:
|
||||
This function returns the maximum length of a process group id string.
|
||||
|
||||
@*/
|
||||
int PMI_Get_id_length_max( int *length );
|
||||
PMIX_EXPORT int PMI_Get_id_length_max( int *length );
|
||||
|
||||
/*@
|
||||
PMI_Barrier - barrier across the process group
|
||||
@ -344,7 +350,7 @@ the local process belongs to. It will not return until all the processes
|
||||
have called 'PMI_Barrier()'.
|
||||
|
||||
@*/
|
||||
int PMI_Barrier( void );
|
||||
PMIX_EXPORT int PMI_Barrier( void );
|
||||
|
||||
/*@
|
||||
PMI_Get_clique_size - obtain the number of processes on the local node
|
||||
@ -364,7 +370,7 @@ function to distinguish between processes that can communicate through IPC
|
||||
mechanisms (e.g., shared memory) and other network mechanisms.
|
||||
|
||||
@*/
|
||||
int PMI_Get_clique_size( int *size );
|
||||
PMIX_EXPORT int PMI_Get_clique_size( int *size );
|
||||
|
||||
/*@
|
||||
PMI_Get_clique_ranks - get the ranks of the local processes in the process group
|
||||
@ -389,7 +395,7 @@ communicate through IPC mechanisms (e.g., shared memory) and other network
|
||||
mechanisms.
|
||||
|
||||
@*/
|
||||
int PMI_Get_clique_ranks( int ranks[], int length);
|
||||
PMIX_EXPORT int PMI_Get_clique_ranks( int ranks[], int length);
|
||||
|
||||
/*@
|
||||
PMI_Abort - abort the process group associated with this process
|
||||
@ -401,7 +407,7 @@ Input Parameters:
|
||||
Return values:
|
||||
. none - this function should not return
|
||||
@*/
|
||||
int PMI_Abort(int exit_code, const char error_msg[]);
|
||||
PMIX_EXPORT int PMI_Abort(int exit_code, const char error_msg[]);
|
||||
|
||||
/* PMI Keymap functions */
|
||||
/*@
|
||||
@ -426,7 +432,7 @@ kvsname, must be at least as long as the value returned by
|
||||
'PMI_KVS_Get_name_length_max()'.
|
||||
|
||||
@*/
|
||||
int PMI_KVS_Get_my_name( char kvsname[], int length );
|
||||
PMIX_EXPORT int PMI_KVS_Get_my_name( char kvsname[], int length );
|
||||
|
||||
/*@
|
||||
PMI_KVS_Get_name_length_max - obtain the length necessary to store a kvsname
|
||||
@ -448,7 +454,7 @@ different implementations may allow different maximum lengths; by using a
|
||||
routine here, we can interface with a variety of implementations of PMI.
|
||||
|
||||
@*/
|
||||
int PMI_KVS_Get_name_length_max( int *length );
|
||||
PMIX_EXPORT int PMI_KVS_Get_name_length_max( int *length );
|
||||
|
||||
/*@
|
||||
PMI_KVS_Get_key_length_max - obtain the length necessary to store a key
|
||||
@ -465,7 +471,7 @@ Notes:
|
||||
This function returns the string length required to store a key.
|
||||
|
||||
@*/
|
||||
int PMI_KVS_Get_key_length_max( int *length );
|
||||
PMIX_EXPORT int PMI_KVS_Get_key_length_max( int *length );
|
||||
|
||||
/*@
|
||||
PMI_KVS_Get_value_length_max - obtain the length necessary to store a value
|
||||
@ -483,7 +489,7 @@ This function returns the string length required to store a value from a
|
||||
keyval space.
|
||||
|
||||
@*/
|
||||
int PMI_KVS_Get_value_length_max( int *length );
|
||||
PMIX_EXPORT int PMI_KVS_Get_value_length_max( int *length );
|
||||
|
||||
/*@
|
||||
PMI_KVS_Create - create a new keyval space
|
||||
@ -508,7 +514,7 @@ parameter, kvsname, must be at least as long as the value returned by
|
||||
'PMI_KVS_Get_name_length_max()'.
|
||||
|
||||
@*/
|
||||
int PMI_KVS_Create( char kvsname[], int length );
|
||||
PMIX_EXPORT int PMI_KVS_Create( char kvsname[], int length );
|
||||
|
||||
/*@
|
||||
PMI_KVS_Destroy - destroy keyval space
|
||||
@ -525,7 +531,7 @@ Notes:
|
||||
This function destroys a keyval space created by 'PMI_KVS_Create()'.
|
||||
|
||||
@*/
|
||||
int PMI_KVS_Destroy( const char kvsname[] );
|
||||
PMIX_EXPORT int PMI_KVS_Destroy( const char kvsname[] );
|
||||
|
||||
/*@
|
||||
PMI_KVS_Put - put a key/value pair in a keyval space
|
||||
@ -551,7 +557,7 @@ space must be unique to the keyval space. You may not put more than once
|
||||
with the same key.
|
||||
|
||||
@*/
|
||||
int PMI_KVS_Put( const char kvsname[], const char key[], const char value[]);
|
||||
PMIX_EXPORT int PMI_KVS_Put( const char kvsname[], const char key[], const char value[]);
|
||||
|
||||
/*@
|
||||
PMI_KVS_Commit - commit all previous puts to the keyval space
|
||||
@ -569,7 +575,7 @@ This function commits all previous puts since the last 'PMI_KVS_Commit()' into
|
||||
the specified keyval space. It is a process local operation.
|
||||
|
||||
@*/
|
||||
int PMI_KVS_Commit( const char kvsname[] );
|
||||
PMIX_EXPORT int PMI_KVS_Commit( const char kvsname[] );
|
||||
|
||||
/*@
|
||||
PMI_KVS_Get - get a key/value pair from a keyval space
|
||||
@ -594,7 +600,7 @@ Notes:
|
||||
This function gets the value of the specified key in the keyval space.
|
||||
|
||||
@*/
|
||||
int PMI_KVS_Get( const char kvsname[], const char key[], char value[], int length);
|
||||
PMIX_EXPORT int PMI_KVS_Get( const char kvsname[], const char key[], char value[], int length);
|
||||
|
||||
/*@
|
||||
PMI_KVS_Iter_first - initialize the iterator and get the first value
|
||||
@ -625,7 +631,7 @@ the values returned by 'PMI_KVS_Get_key_length_max()' and
|
||||
'PMI_KVS_Get_value_length_max()'.
|
||||
|
||||
@*/
|
||||
int PMI_KVS_Iter_first(const char kvsname[], char key[], int key_len, char val[], int val_len);
|
||||
PMIX_EXPORT int PMI_KVS_Iter_first(const char kvsname[], char key[], int key_len, char val[], int val_len);
|
||||
|
||||
/*@
|
||||
PMI_KVS_Iter_next - get the next keyval pair from the keyval space
|
||||
@ -656,7 +662,7 @@ key and val, must be at least as long as the values returned by
|
||||
'PMI_KVS_Get_key_length_max()' and 'PMI_KVS_Get_value_length_max()'.
|
||||
|
||||
@*/
|
||||
int PMI_KVS_Iter_next(const char kvsname[], char key[], int key_len, char val[], int val_len);
|
||||
PMIX_EXPORT int PMI_KVS_Iter_next(const char kvsname[], char key[], int key_len, char val[], int val_len);
|
||||
|
||||
/* PMI Process Creation functions */
|
||||
|
||||
@ -710,15 +716,15 @@ maxprocs. The acceptable number of processes spawned may be controlled by
|
||||
mpiexec in the MPI-2 standard. Environment variables may be passed to the
|
||||
spawned processes through PMI implementation specific 'info_keyval' parameters.
|
||||
@*/
|
||||
int PMI_Spawn_multiple(int count,
|
||||
const char * cmds[],
|
||||
const char ** argvs[],
|
||||
const int maxprocs[],
|
||||
const int info_keyval_sizesp[],
|
||||
const PMI_keyval_t * info_keyval_vectors[],
|
||||
int preput_keyval_size,
|
||||
const PMI_keyval_t preput_keyval_vector[],
|
||||
int errors[]);
|
||||
PMIX_EXPORT int PMI_Spawn_multiple(int count,
|
||||
const char * cmds[],
|
||||
const char ** argvs[],
|
||||
const int maxprocs[],
|
||||
const int info_keyval_sizesp[],
|
||||
const PMI_keyval_t * info_keyval_vectors[],
|
||||
int preput_keyval_size,
|
||||
const PMI_keyval_t preput_keyval_vector[],
|
||||
int errors[]);
|
||||
|
||||
|
||||
/*@
|
||||
@ -752,7 +758,7 @@ arguments in the args array, this function may parse more than one argument as l
|
||||
as the options are contiguous in the args array.
|
||||
|
||||
@*/
|
||||
int PMI_Parse_option(int num_args, char *args[], int *num_parsed, PMI_keyval_t **keyvalp, int *size);
|
||||
PMIX_EXPORT int PMI_Parse_option(int num_args, char *args[], int *num_parsed, PMI_keyval_t **keyvalp, int *size);
|
||||
|
||||
/*@
|
||||
PMI_Args_to_keyval - create keyval structures from command line arguments
|
||||
@ -779,7 +785,7 @@ not be used to free this array as there is no requirement that the array be
|
||||
allocated with 'malloc()'.
|
||||
|
||||
@*/
|
||||
int PMI_Args_to_keyval(int *argcp, char *((*argvp)[]), PMI_keyval_t **keyvalp, int *size);
|
||||
PMIX_EXPORT int PMI_Args_to_keyval(int *argcp, char *((*argvp)[]), PMI_keyval_t **keyvalp, int *size);
|
||||
|
||||
/*@
|
||||
PMI_Free_keyvals - free the keyval structures created by PMI_Args_to_keyval
|
||||
@ -798,7 +804,7 @@ Notes:
|
||||
Using this routine instead of 'free' allows the PMI package to track
|
||||
allocation of storage or to use interal storage as it sees fit.
|
||||
@*/
|
||||
int PMI_Free_keyvals(PMI_keyval_t keyvalp[], int size);
|
||||
PMIX_EXPORT int PMI_Free_keyvals(PMI_keyval_t keyvalp[], int size);
|
||||
|
||||
/*@
|
||||
PMI_Get_options - get a string of command line argument descriptions that may be printed to the user
|
||||
@ -820,7 +826,7 @@ Return values:
|
||||
Notes:
|
||||
This function returns the command line options specific to the pmi implementation
|
||||
@*/
|
||||
int PMI_Get_options(char *str, int *length);
|
||||
PMIX_EXPORT int PMI_Get_options(char *str, int *length);
|
||||
|
||||
#if defined(__cplusplus)
|
||||
}
|
||||
|
@ -7,6 +7,12 @@
|
||||
#ifndef PMI2_H_INCLUDED
|
||||
#define PMI2_H_INCLUDED
|
||||
|
||||
#ifdef PMIX_HAVE_VISIBILITY
|
||||
#define PMIX_EXPORT __attribute__((__visibility__("default")))
|
||||
#else
|
||||
#define PMIX_EXPORT
|
||||
#endif
|
||||
|
||||
#define PMI2_MAX_KEYLEN 64
|
||||
#define PMI2_MAX_VALLEN 1024
|
||||
#define PMI2_MAX_ATTRVALUE 1024
|
||||
@ -117,7 +123,7 @@ typedef struct PMI2_Connect_comm {
|
||||
iff this process group has a parent.
|
||||
|
||||
@*/
|
||||
int PMI2_Init(int *spawned, int *size, int *rank, int *appnum);
|
||||
PMIX_EXPORT int PMI2_Init(int *spawned, int *size, int *rank, int *appnum);
|
||||
|
||||
/*@
|
||||
PMI2_Finalize - finalize the Process Manager Interface
|
||||
@ -129,7 +135,7 @@ int PMI2_Init(int *spawned, int *size, int *rank, int *appnum);
|
||||
Finalize PMI for this job.
|
||||
|
||||
@*/
|
||||
int PMI2_Finalize(void);
|
||||
PMIX_EXPORT int PMI2_Finalize(void);
|
||||
|
||||
/*@
|
||||
PMI2_Initialized - check if PMI has been initialized
|
||||
@ -138,7 +144,7 @@ int PMI2_Finalize(void);
|
||||
Non-zero if PMI2_Initialize has been called successfully, zero otherwise.
|
||||
|
||||
@*/
|
||||
int PMI2_Initialized(void);
|
||||
PMIX_EXPORT int PMI2_Initialized(void);
|
||||
|
||||
/*@
|
||||
PMI2_Abort - abort the process group associated with this process
|
||||
@ -152,7 +158,7 @@ int PMI2_Initialized(void);
|
||||
error code otherwise.
|
||||
|
||||
@*/
|
||||
int PMI2_Abort(int flag, const char msg[]);
|
||||
PMIX_EXPORT int PMI2_Abort(int flag, const char msg[]);
|
||||
|
||||
/*@
|
||||
PMI2_Spawn - spawn a new set of processes
|
||||
@ -191,15 +197,15 @@ int PMI2_Abort(int flag, const char msg[]);
|
||||
mpiexec in the MPI-2 standard. Environment variables may be passed to the
|
||||
spawned processes through PMI implementation specific 'info_keyval' parameters.
|
||||
@*/
|
||||
int PMI2_Job_Spawn(int count, const char * cmds[],
|
||||
int argcs[], const char ** argvs[],
|
||||
const int maxprocs[],
|
||||
const int info_keyval_sizes[],
|
||||
const PMI_keyval_t *info_keyval_vectors[],
|
||||
int preput_keyval_size,
|
||||
const PMI_keyval_t *preput_keyval_vector[],
|
||||
char jobId[], int jobIdSize,
|
||||
int errors[]);
|
||||
PMIX_EXPORT int PMI2_Job_Spawn(int count, const char * cmds[],
|
||||
int argcs[], const char ** argvs[],
|
||||
const int maxprocs[],
|
||||
const int info_keyval_sizes[],
|
||||
const PMI_keyval_t *info_keyval_vectors[],
|
||||
int preput_keyval_size,
|
||||
const PMI_keyval_t *preput_keyval_vector[],
|
||||
char jobId[], int jobIdSize,
|
||||
int errors[]);
|
||||
|
||||
/*@
|
||||
PMI2_Job_GetId - get job id of this job
|
||||
@ -214,7 +220,7 @@ int PMI2_Job_Spawn(int count, const char * cmds[],
|
||||
Returns 'PMI2_SUCCESS' on success and an PMI error code on failure.
|
||||
|
||||
@*/
|
||||
int PMI2_Job_GetId(char jobid[], int jobid_size);
|
||||
PMIX_EXPORT int PMI2_Job_GetId(char jobid[], int jobid_size);
|
||||
|
||||
/*@
|
||||
PMI2_Job_GetRank - get rank of this job
|
||||
@ -223,7 +229,7 @@ int PMI2_Job_GetId(char jobid[], int jobid_size);
|
||||
Return values:
|
||||
Returns 'PMI2_SUCCESS' on success and an PMI error code on failure.
|
||||
@*/
|
||||
int PMI2_Job_GetRank(int* rank);
|
||||
PMIX_EXPORT int PMI2_Job_GetRank(int* rank);
|
||||
|
||||
/*@
|
||||
PMI2_Info_GetSize - get the number of processes on the node
|
||||
@ -232,7 +238,7 @@ int PMI2_Job_GetRank(int* rank);
|
||||
Return values:
|
||||
Returns 'PMI2_SUCCESS' on success and an PMI error code on failure.
|
||||
@*/
|
||||
int PMI2_Info_GetSize(int* size);
|
||||
PMIX_EXPORT int PMI2_Info_GetSize(int* size);
|
||||
|
||||
/*@
|
||||
PMI2_Job_Connect - connect to the parallel job with ID jobid
|
||||
@ -256,7 +262,7 @@ int PMI2_Info_GetSize(int* size);
|
||||
side. Processes that are already connected may call this routine.
|
||||
|
||||
@*/
|
||||
int PMI2_Job_Connect(const char jobid[], PMI2_Connect_comm_t *conn);
|
||||
PMIX_EXPORT int PMI2_Job_Connect(const char jobid[], PMI2_Connect_comm_t *conn);
|
||||
|
||||
/*@
|
||||
PMI2_Job_Disconnect - disconnects from the job with ID jobid
|
||||
@ -268,7 +274,7 @@ int PMI2_Job_Connect(const char jobid[], PMI2_Connect_comm_t *conn);
|
||||
Returns 'PMI2_SUCCESS' on success and an PMI error code on failure.
|
||||
|
||||
@*/
|
||||
int PMI2_Job_Disconnect(const char jobid[]);
|
||||
PMIX_EXPORT int PMI2_Job_Disconnect(const char jobid[]);
|
||||
|
||||
/*@
|
||||
PMI2_KVS_Put - put a key/value pair in the keyval space for this job
|
||||
@ -287,7 +293,7 @@ int PMI2_Job_Disconnect(const char jobid[]);
|
||||
is not defined.
|
||||
|
||||
@*/
|
||||
int PMI2_KVS_Put(const char key[], const char value[]);
|
||||
PMIX_EXPORT int PMI2_KVS_Put(const char key[], const char value[]);
|
||||
/*@
|
||||
PMI2_KVS_Fence - commit all PMI2_KVS_Put calls made before this fence
|
||||
|
||||
@ -307,7 +313,7 @@ int PMI2_KVS_Put(const char key[], const char value[]);
|
||||
implementations.
|
||||
|
||||
@*/
|
||||
int PMI2_KVS_Fence(void);
|
||||
PMIX_EXPORT int PMI2_KVS_Fence(void);
|
||||
|
||||
/*@
|
||||
PMI2_KVS_Get - returns the value associated with key in the key-value
|
||||
@ -331,7 +337,7 @@ int PMI2_KVS_Fence(void);
|
||||
Returns 'PMI2_SUCCESS' on success and an PMI error code on failure.
|
||||
|
||||
@*/
|
||||
int PMI2_KVS_Get(const char *jobid, int src_pmi_id, const char key[], char value [], int maxvalue, int *vallen);
|
||||
PMIX_EXPORT int PMI2_KVS_Get(const char *jobid, int src_pmi_id, const char key[], char value [], int maxvalue, int *vallen);
|
||||
|
||||
/*@
|
||||
PMI2_Info_GetNodeAttr - returns the value of the attribute associated
|
||||
@ -371,7 +377,7 @@ int PMI2_KVS_Get(const char *jobid, int src_pmi_id, const char key[], char value
|
||||
file. Returned as a string.
|
||||
|
||||
@*/
|
||||
int PMI2_Info_GetNodeAttr(const char name[], char value[], int valuelen, int *found, int waitfor);
|
||||
PMIX_EXPORT int PMI2_Info_GetNodeAttr(const char name[], char value[], int valuelen, int *found, int waitfor);
|
||||
|
||||
/*@
|
||||
PMI2_Info_GetNodeAttrIntArray - returns the value of the attribute associated
|
||||
@ -405,7 +411,7 @@ int PMI2_Info_GetNodeAttr(const char name[], char value[], int valuelen, int *fo
|
||||
cartesian.
|
||||
|
||||
@*/
|
||||
int PMI2_Info_GetNodeAttrIntArray(const char name[], int array[], int arraylen, int *outlen, int *found);
|
||||
PMIX_EXPORT int PMI2_Info_GetNodeAttrIntArray(const char name[], int array[], int arraylen, int *outlen, int *found);
|
||||
|
||||
/*@
|
||||
PMI2_Info_PutNodeAttr - stores the value of the named attribute
|
||||
@ -423,7 +429,7 @@ int PMI2_Info_GetNodeAttrIntArray(const char name[], int array[], int arraylen,
|
||||
processes on the same SMP node.
|
||||
|
||||
@*/
|
||||
int PMI2_Info_PutNodeAttr(const char name[], const char value[]);
|
||||
PMIX_EXPORT int PMI2_Info_PutNodeAttr(const char name[], const char value[]);
|
||||
|
||||
/*@
|
||||
PMI2_Info_GetJobAttr - returns the value of the attribute associated
|
||||
@ -441,7 +447,7 @@ int PMI2_Info_PutNodeAttr(const char name[], const char value[]);
|
||||
Returns 'PMI2_SUCCESS' on success and an PMI error code on failure.
|
||||
|
||||
@*/
|
||||
int PMI2_Info_GetJobAttr(const char name[], char value[], int valuelen, int *found);
|
||||
PMIX_EXPORT int PMI2_Info_GetJobAttr(const char name[], char value[], int valuelen, int *found);
|
||||
|
||||
/*@
|
||||
PMI2_Info_GetJobAttrIntArray - returns the value of the attribute associated
|
||||
@ -506,7 +512,7 @@ int PMI2_Info_GetJobAttr(const char name[], char value[], int valuelen, int *fou
|
||||
underlying data models.
|
||||
|
||||
@*/
|
||||
int PMI2_Info_GetJobAttrIntArray(const char name[], int array[], int arraylen, int *outlen, int *found);
|
||||
PMIX_EXPORT int PMI2_Info_GetJobAttrIntArray(const char name[], int array[], int arraylen, int *outlen, int *found);
|
||||
|
||||
/*@
|
||||
PMI2_Nameserv_publish - publish a name
|
||||
@ -520,7 +526,7 @@ int PMI2_Info_GetJobAttrIntArray(const char name[], int array[], int arraylen, i
|
||||
Returns 'PMI2_SUCCESS' on success and an PMI error code on failure.
|
||||
|
||||
@*/
|
||||
int PMI2_Nameserv_publish(const char service_name[], const PMI_keyval_t *info_ptr, const char port[]);
|
||||
PMIX_EXPORT int PMI2_Nameserv_publish(const char service_name[], const PMI_keyval_t *info_ptr, const char port[]);
|
||||
|
||||
/*@
|
||||
PMI2_Nameserv_lookup - lookup a service by name
|
||||
@ -537,8 +543,8 @@ int PMI2_Nameserv_publish(const char service_name[], const PMI_keyval_t *info_pt
|
||||
Returns 'PMI2_SUCCESS' on success and an PMI error code on failure.
|
||||
|
||||
@*/
|
||||
int PMI2_Nameserv_lookup(const char service_name[], const PMI_keyval_t *info_ptr,
|
||||
char port[], int portLen);
|
||||
PMIX_EXPORT int PMI2_Nameserv_lookup(const char service_name[], const PMI_keyval_t *info_ptr,
|
||||
char port[], int portLen);
|
||||
/*@
|
||||
PMI2_Nameserv_unpublish - unpublish a name
|
||||
|
||||
@ -550,8 +556,8 @@ int PMI2_Nameserv_lookup(const char service_name[], const PMI_keyval_t *info_ptr
|
||||
Returns 'PMI2_SUCCESS' on success and an PMI error code on failure.
|
||||
|
||||
@*/
|
||||
int PMI2_Nameserv_unpublish(const char service_name[],
|
||||
const PMI_keyval_t *info_ptr);
|
||||
PMIX_EXPORT int PMI2_Nameserv_unpublish(const char service_name[],
|
||||
const PMI_keyval_t *info_ptr);
|
||||
|
||||
|
||||
|
||||
|
@ -80,8 +80,8 @@ extern "C" {
|
||||
* and subsequent operations. Pass a _NULL_ value for the array pointer
|
||||
* is supported if no directives are desired.
|
||||
*/
|
||||
pmix_status_t PMIx_Init(pmix_proc_t *proc,
|
||||
pmix_info_t info[], size_t ninfo);
|
||||
PMIX_EXPORT pmix_status_t PMIx_Init(pmix_proc_t *proc,
|
||||
pmix_info_t info[], size_t ninfo);
|
||||
|
||||
/* Finalize the PMIx client, closing the connection to the local server.
|
||||
* An error code will be returned if, for some reason, the connection
|
||||
@ -94,14 +94,14 @@ extern "C" {
|
||||
* internal barrier operation. This attribute directs PMIx_Finalize to
|
||||
* execute a barrier as part of the finalize operation.
|
||||
*/
|
||||
pmix_status_t PMIx_Finalize(const pmix_info_t info[], size_t ninfo);
|
||||
PMIX_EXPORT pmix_status_t PMIx_Finalize(const pmix_info_t info[], size_t ninfo);
|
||||
|
||||
|
||||
/* Returns _true_ if the PMIx client has been successfully initialized,
|
||||
* returns _false_ otherwise. Note that the function only reports the
|
||||
* internal state of the PMIx client - it does not verify an active
|
||||
* connection with the server, nor that the server is functional. */
|
||||
int PMIx_Initialized(void);
|
||||
PMIX_EXPORT int PMIx_Initialized(void);
|
||||
|
||||
|
||||
/* Request that the provided array of procs be aborted, returning the
|
||||
@ -121,22 +121,22 @@ extern "C" {
|
||||
* caused by multiple processes calling PMIx_Abort are left to the
|
||||
* server implementation to resolve with regard to which status is
|
||||
* returned and what messages (if any) are printed. */
|
||||
pmix_status_t PMIx_Abort(int status, const char msg[],
|
||||
pmix_proc_t procs[], size_t nprocs);
|
||||
PMIX_EXPORT pmix_status_t PMIx_Abort(int status, const char msg[],
|
||||
pmix_proc_t procs[], size_t nprocs);
|
||||
|
||||
|
||||
/* Push a value into the client's namespace. The client library will cache
|
||||
* the information locally until _PMIx_Commit_ is called. The provided scope
|
||||
* value is passed to the local PMIx server, which will distribute the data
|
||||
* as directed. */
|
||||
pmix_status_t PMIx_Put(pmix_scope_t scope, const char key[], pmix_value_t *val);
|
||||
PMIX_EXPORT pmix_status_t PMIx_Put(pmix_scope_t scope, const char key[], pmix_value_t *val);
|
||||
|
||||
|
||||
/* Push all previously _PMIx_Put_ values to the local PMIx server.
|
||||
* This is an asynchronous operation - the library will immediately
|
||||
* return to the caller while the data is transmitted to the local
|
||||
* server in the background */
|
||||
pmix_status_t PMIx_Commit(void);
|
||||
PMIX_EXPORT pmix_status_t PMIx_Commit(void);
|
||||
|
||||
|
||||
/* Execute a blocking barrier across the processes identified in the
|
||||
@ -174,14 +174,14 @@ extern "C" {
|
||||
* the timeout parameter can help avoid "hangs" due to programming errors
|
||||
* that prevent one or more procs from reaching the "fence".
|
||||
*/
|
||||
pmix_status_t PMIx_Fence(const pmix_proc_t procs[], size_t nprocs,
|
||||
const pmix_info_t info[], size_t ninfo);
|
||||
PMIX_EXPORT pmix_status_t PMIx_Fence(const pmix_proc_t procs[], size_t nprocs,
|
||||
const pmix_info_t info[], size_t ninfo);
|
||||
|
||||
/* Non-blocking version of PMIx_Fence. Note that the function will return
|
||||
* an error if a _NULL_ callback function is given. */
|
||||
pmix_status_t PMIx_Fence_nb(const pmix_proc_t procs[], size_t nprocs,
|
||||
const pmix_info_t info[], size_t ninfo,
|
||||
pmix_op_cbfunc_t cbfunc, void *cbdata);
|
||||
PMIX_EXPORT pmix_status_t PMIx_Fence_nb(const pmix_proc_t procs[], size_t nprocs,
|
||||
const pmix_info_t info[], size_t ninfo,
|
||||
pmix_op_cbfunc_t cbfunc, void *cbdata);
|
||||
|
||||
|
||||
/* Retrieve information for the specified _key_ as published by the process
|
||||
@ -200,17 +200,17 @@ extern "C" {
|
||||
* an error. The timeout parameter can help avoid "hangs" due to programming
|
||||
* errors that prevent the target proc from ever exposing its data.
|
||||
*/
|
||||
pmix_status_t PMIx_Get(const pmix_proc_t *proc, const char key[],
|
||||
const pmix_info_t info[], size_t ninfo,
|
||||
pmix_value_t **val);
|
||||
PMIX_EXPORT pmix_status_t PMIx_Get(const pmix_proc_t *proc, const char key[],
|
||||
const pmix_info_t info[], size_t ninfo,
|
||||
pmix_value_t **val);
|
||||
|
||||
/* A non-blocking operation version of PMIx_Get - the callback function will
|
||||
* be executed once the specified data has been _PMIx_Put_
|
||||
* by the identified process and retrieved by the local server. The info
|
||||
* array is used as described above for the blocking form of this call. */
|
||||
pmix_status_t PMIx_Get_nb(const pmix_proc_t *proc, const char key[],
|
||||
const pmix_info_t info[], size_t ninfo,
|
||||
pmix_value_cbfunc_t cbfunc, void *cbdata);
|
||||
PMIX_EXPORT pmix_status_t PMIx_Get_nb(const pmix_proc_t *proc, const char key[],
|
||||
const pmix_info_t info[], size_t ninfo,
|
||||
pmix_value_cbfunc_t cbfunc, void *cbdata);
|
||||
|
||||
|
||||
/* Publish the data in the info array for lookup. By default,
|
||||
@ -232,9 +232,9 @@ extern "C" {
|
||||
* return immediately, executing the callback when the server confirms
|
||||
* availability of the data.
|
||||
*/
|
||||
pmix_status_t PMIx_Publish(const pmix_info_t info[], size_t ninfo);
|
||||
pmix_status_t PMIx_Publish_nb(const pmix_info_t info[], size_t ninfo,
|
||||
pmix_op_cbfunc_t cbfunc, void *cbdata);
|
||||
PMIX_EXPORT pmix_status_t PMIx_Publish(const pmix_info_t info[], size_t ninfo);
|
||||
PMIX_EXPORT pmix_status_t PMIx_Publish_nb(const pmix_info_t info[], size_t ninfo,
|
||||
pmix_op_cbfunc_t cbfunc, void *cbdata);
|
||||
|
||||
|
||||
/* Lookup information published by this or another process. By default,
|
||||
@ -273,8 +273,8 @@ extern "C" {
|
||||
* (b) PMIX_TIMEOUT - max time to wait for data to become available.
|
||||
*
|
||||
*/
|
||||
pmix_status_t PMIx_Lookup(pmix_pdata_t data[], size_t ndata,
|
||||
const pmix_info_t info[], size_t ninfo);
|
||||
PMIX_EXPORT pmix_status_t PMIx_Lookup(pmix_pdata_t data[], size_t ndata,
|
||||
const pmix_info_t info[], size_t ninfo);
|
||||
|
||||
/* Non-blocking form of the _PMIx_Lookup_ function. Data for
|
||||
* the provided NULL-terminated keys array will be returned
|
||||
@ -282,8 +282,8 @@ extern "C" {
|
||||
* behavior is to _not_ wait for data to be published. The
|
||||
* info keys can be used to modify the behavior as previously
|
||||
* described */
|
||||
pmix_status_t PMIx_Lookup_nb(char **keys, const pmix_info_t info[], size_t ninfo,
|
||||
pmix_lookup_cbfunc_t cbfunc, void *cbdata);
|
||||
PMIX_EXPORT pmix_status_t PMIx_Lookup_nb(char **keys, const pmix_info_t info[], size_t ninfo,
|
||||
pmix_lookup_cbfunc_t cbfunc, void *cbdata);
|
||||
|
||||
|
||||
/* Unpublish data posted by this process using the given keys.
|
||||
@ -294,15 +294,15 @@ extern "C" {
|
||||
* By default, the range is assumed to be PMIX_SESSION. Changes
|
||||
* to the range, and any additional directives, can be provided
|
||||
* in the pmix_info_t array */
|
||||
pmix_status_t PMIx_Unpublish(char **keys,
|
||||
const pmix_info_t info[], size_t ninfo);
|
||||
PMIX_EXPORT pmix_status_t PMIx_Unpublish(char **keys,
|
||||
const pmix_info_t info[], size_t ninfo);
|
||||
|
||||
/* Non-blocking form of the _PMIx_Unpublish_ function. The
|
||||
* callback function will be executed once the server confirms
|
||||
* removal of the specified data. */
|
||||
pmix_status_t PMIx_Unpublish_nb(char **keys,
|
||||
const pmix_info_t info[], size_t ninfo,
|
||||
pmix_op_cbfunc_t cbfunc, void *cbdata);
|
||||
PMIX_EXPORT pmix_status_t PMIx_Unpublish_nb(char **keys,
|
||||
const pmix_info_t info[], size_t ninfo,
|
||||
pmix_op_cbfunc_t cbfunc, void *cbdata);
|
||||
|
||||
|
||||
/* Spawn a new job. The assigned namespace of the spawned applications
|
||||
@ -335,17 +335,17 @@ extern "C" {
|
||||
* (c) PMIX_NOTIFY_COMPLETION - notify the parent process when the
|
||||
* child job terminates, either normally or with error
|
||||
*/
|
||||
pmix_status_t PMIx_Spawn(const pmix_info_t job_info[], size_t ninfo,
|
||||
const pmix_app_t apps[], size_t napps,
|
||||
char nspace[]);
|
||||
PMIX_EXPORT pmix_status_t PMIx_Spawn(const pmix_info_t job_info[], size_t ninfo,
|
||||
const pmix_app_t apps[], size_t napps,
|
||||
char nspace[]);
|
||||
|
||||
|
||||
/* Non-blocking form of the _PMIx_Spawn_ function. The callback
|
||||
* will be executed upon launch of the specified applications,
|
||||
* or upon failure to launch any of them. */
|
||||
pmix_status_t PMIx_Spawn_nb(const pmix_info_t job_info[], size_t ninfo,
|
||||
const pmix_app_t apps[], size_t napps,
|
||||
pmix_spawn_cbfunc_t cbfunc, void *cbdata);
|
||||
PMIX_EXPORT pmix_status_t PMIx_Spawn_nb(const pmix_info_t job_info[], size_t ninfo,
|
||||
const pmix_app_t apps[], size_t napps,
|
||||
pmix_spawn_cbfunc_t cbfunc, void *cbdata);
|
||||
|
||||
/* Record the specified processes as "connected". Both blocking and non-blocking
|
||||
* versions are provided. This means that the resource manager should treat the
|
||||
@ -367,12 +367,12 @@ extern "C" {
|
||||
* user-level directives regarding the algorithm to be used for the collective
|
||||
* operation involved in the "connect", timeout constraints, and other options
|
||||
* available from the host RM */
|
||||
pmix_status_t PMIx_Connect(const pmix_proc_t procs[], size_t nprocs,
|
||||
const pmix_info_t info[], size_t ninfo);
|
||||
PMIX_EXPORT pmix_status_t PMIx_Connect(const pmix_proc_t procs[], size_t nprocs,
|
||||
const pmix_info_t info[], size_t ninfo);
|
||||
|
||||
pmix_status_t PMIx_Connect_nb(const pmix_proc_t procs[], size_t nprocs,
|
||||
const pmix_info_t info[], size_t ninfo,
|
||||
pmix_op_cbfunc_t cbfunc, void *cbdata);
|
||||
PMIX_EXPORT pmix_status_t PMIx_Connect_nb(const pmix_proc_t procs[], size_t nprocs,
|
||||
const pmix_info_t info[], size_t ninfo,
|
||||
pmix_op_cbfunc_t cbfunc, void *cbdata);
|
||||
|
||||
/* Disconnect a previously connected set of processes. An error will be returned
|
||||
* if the specified set of procs was not previously "connected". As above, a process
|
||||
@ -380,12 +380,12 @@ extern "C" {
|
||||
* is not allowed to reconnect to a set of procs that has not fully completed
|
||||
* disconnect - i.e., you have to fully disconnect before you can reconnect to the
|
||||
* _same_ group of processes. The info array is used as above. */
|
||||
pmix_status_t PMIx_Disconnect(const pmix_proc_t procs[], size_t nprocs,
|
||||
const pmix_info_t info[], size_t ninfo);
|
||||
PMIX_EXPORT pmix_status_t PMIx_Disconnect(const pmix_proc_t procs[], size_t nprocs,
|
||||
const pmix_info_t info[], size_t ninfo);
|
||||
|
||||
pmix_status_t PMIx_Disconnect_nb(const pmix_proc_t ranges[], size_t nprocs,
|
||||
const pmix_info_t info[], size_t ninfo,
|
||||
pmix_op_cbfunc_t cbfunc, void *cbdata);
|
||||
PMIX_EXPORT pmix_status_t PMIx_Disconnect_nb(const pmix_proc_t ranges[], size_t nprocs,
|
||||
const pmix_info_t info[], size_t ninfo,
|
||||
pmix_op_cbfunc_t cbfunc, void *cbdata);
|
||||
|
||||
/* Given a node name, return an array of processes within the specified nspace
|
||||
* on that node. If the nspace is NULL, then all processes on the node will
|
||||
@ -394,15 +394,15 @@ extern "C" {
|
||||
* for releasing the array when done with it - the PMIX_PROC_FREE macro is
|
||||
* provided for this purpose.
|
||||
*/
|
||||
pmix_status_t PMIx_Resolve_peers(const char *nodename, const char *nspace,
|
||||
pmix_proc_t **procs, size_t *nprocs);
|
||||
PMIX_EXPORT pmix_status_t PMIx_Resolve_peers(const char *nodename, const char *nspace,
|
||||
pmix_proc_t **procs, size_t *nprocs);
|
||||
|
||||
|
||||
/* Given an nspace, return the list of nodes hosting processes within
|
||||
* that nspace. The returned string will contain a comma-delimited list
|
||||
* of nodenames. The caller is responsible for releasing the string
|
||||
* when done with it */
|
||||
pmix_status_t PMIx_Resolve_nodes(const char *nspace, char **nodelist);
|
||||
PMIX_EXPORT pmix_status_t PMIx_Resolve_nodes(const char *nspace, char **nodelist);
|
||||
|
||||
/* Query information about the system in general - can include
|
||||
* a list of active nspaces, network topology, etc. Also can be
|
||||
@ -420,8 +420,8 @@ extern "C" {
|
||||
* PMIX_ERR_PARTIAL_SUCCESS - some of the data has been returned
|
||||
* PMIX_ERR_NOT_SUPPORTED - the host RM does not support this function
|
||||
*/
|
||||
pmix_status_t PMIx_Query_info_nb(pmix_query_t queries[], size_t nqueries,
|
||||
pmix_info_cbfunc_t cbfunc, void *cbdata);
|
||||
PMIX_EXPORT pmix_status_t PMIx_Query_info_nb(pmix_query_t queries[], size_t nqueries,
|
||||
pmix_info_cbfunc_t cbfunc, void *cbdata);
|
||||
|
||||
/* Log data to a central data service/store, subject to the
|
||||
* services offered by the host resource manager. The data to
|
||||
@ -433,9 +433,9 @@ pmix_status_t PMIx_Query_info_nb(pmix_query_t queries[], size_t nqueries,
|
||||
* has been completed. The data array must be maintained until
|
||||
* the callback is provided
|
||||
*/
|
||||
pmix_status_t PMIx_Log_nb(const pmix_info_t data[], size_t ndata,
|
||||
const pmix_info_t directives[], size_t ndirs,
|
||||
pmix_op_cbfunc_t cbfunc, void *cbdata);
|
||||
PMIX_EXPORT pmix_status_t PMIx_Log_nb(const pmix_info_t data[], size_t ndata,
|
||||
const pmix_info_t directives[], size_t ndirs,
|
||||
pmix_op_cbfunc_t cbfunc, void *cbdata);
|
||||
|
||||
/* Request an allocation operation from the host resource manager.
|
||||
* Several broad categories are envisioned, including the ability to:
|
||||
@ -469,9 +469,9 @@ pmix_status_t PMIx_Log_nb(const pmix_info_t data[], size_t ndata,
|
||||
* lieue of preemption. A corresponding ability to "reacquire" resources
|
||||
* previously released is included.
|
||||
*/
|
||||
pmix_status_t PMIx_Allocation_request_nb(pmix_alloc_directive_t directive,
|
||||
pmix_info_t *info, size_t ninfo,
|
||||
pmix_info_cbfunc_t cbfunc, void *cbdata);
|
||||
PMIX_EXPORT pmix_status_t PMIx_Allocation_request_nb(pmix_alloc_directive_t directive,
|
||||
pmix_info_t *info, size_t ninfo,
|
||||
pmix_info_cbfunc_t cbfunc, void *cbdata);
|
||||
|
||||
/* Request a job control action. The targets array identifies the
|
||||
* processes to which the requested job control action is to be applied.
|
||||
@ -487,9 +487,9 @@ pmix_status_t PMIx_Allocation_request_nb(pmix_alloc_directive_t directive,
|
||||
* when the callback function completes - this will be used to release
|
||||
* any provided pmix_info_t array.
|
||||
*/
|
||||
pmix_status_t PMIx_Job_control_nb(const pmix_proc_t targets[], size_t ntargets,
|
||||
const pmix_info_t directives[], size_t ndirs,
|
||||
pmix_info_cbfunc_t cbfunc, void *cbdata);
|
||||
PMIX_EXPORT pmix_status_t PMIx_Job_control_nb(const pmix_proc_t targets[], size_t ntargets,
|
||||
const pmix_info_t directives[], size_t ndirs,
|
||||
pmix_info_cbfunc_t cbfunc, void *cbdata);
|
||||
|
||||
/* Request that something be monitored - e.g., that the server monitor
|
||||
* this process for periodic heartbeats as an indication that the process
|
||||
@ -518,9 +518,9 @@ pmix_status_t PMIx_Job_control_nb(const pmix_proc_t targets[], size_t ntargets,
|
||||
*
|
||||
* Note: a process can send a heartbeat to the server using the PMIx_Heartbeat
|
||||
* macro provided below*/
|
||||
pmix_status_t PMIx_Process_monitor_nb(const pmix_info_t *monitor, pmix_status_t error,
|
||||
const pmix_info_t directives[], size_t ndirs,
|
||||
pmix_info_cbfunc_t cbfunc, void *cbdata);
|
||||
PMIX_EXPORT pmix_status_t PMIx_Process_monitor_nb(const pmix_info_t *monitor, pmix_status_t error,
|
||||
const pmix_info_t directives[], size_t ndirs,
|
||||
pmix_info_cbfunc_t cbfunc, void *cbdata);
|
||||
|
||||
/* define a special macro to simplify sending of a heartbeat */
|
||||
#define PMIx_Heartbeat() \
|
||||
|
@ -60,6 +60,13 @@
|
||||
#include <sys/time.h> /* for struct timeval */
|
||||
#include <unistd.h> /* for uid_t and gid_t */
|
||||
#include <sys/types.h> /* for uid_t and gid_t */
|
||||
|
||||
#ifdef PMIX_HAVE_VISIBILITY
|
||||
#define PMIX_EXPORT __attribute__((__visibility__("default")))
|
||||
#else
|
||||
#define PMIX_EXPORT
|
||||
#endif
|
||||
|
||||
#include <pmix_rename.h>
|
||||
#include <pmix_version.h>
|
||||
|
||||
@ -126,8 +133,6 @@ typedef uint32_t pmix_rank_t;
|
||||
#define PMIX_SERVER_ENABLE_MONITORING "pmix.srv.monitor" // (bool) Enable PMIx internal monitoring by server
|
||||
#define PMIX_SERVER_NSPACE "pmix.srv.nspace" // (char*) Name of the nspace to use for this server
|
||||
#define PMIX_SERVER_RANK "pmix.srv.rank" // (pmix_rank_t) Rank of this server
|
||||
#define PMIX_TOOL_NSPACE "pmix.tool.nspace" // (char*) Name of the nspace to use for this tool
|
||||
#define PMIX_TOOL_RANK "pmix.tool.rank" // (uint32_t) Rank of this tool
|
||||
|
||||
|
||||
/* identification attributes */
|
||||
@ -221,6 +226,9 @@ typedef uint32_t pmix_rank_t;
|
||||
#define PMIX_TOPOLOGY "pmix.topo" // (hwloc_topology_t) pointer to the PMIx client's internal topology object
|
||||
#define PMIX_TOPOLOGY_SIGNATURE "pmix.toposig" // (char*) topology signature string
|
||||
#define PMIX_LOCALITY_STRING "pmix.locstr" // (char*) string describing a proc's location
|
||||
#define PMIX_HWLOC_SHMEM_ADDR "pmix.hwlocaddr" // (size_t) address of HWLOC shared memory segment
|
||||
#define PMIX_HWLOC_SHMEM_SIZE "pmix.hwlocsize" // (size_t) size of HWLOC shared memory segment
|
||||
#define PMIX_HWLOC_SHMEM_FILE "pmix.hwlocfile" // (char*) path to HWLOC shared memory file
|
||||
|
||||
/* request-related info */
|
||||
#define PMIX_COLLECT_DATA "pmix.collect" // (bool) collect data and return it at the end of the operation
|
||||
@ -1531,19 +1539,19 @@ typedef void (*pmix_info_cbfunc_t)(pmix_status_t status,
|
||||
* using a new set of info values.
|
||||
*
|
||||
* See pmix_common.h for a description of the notification function */
|
||||
void PMIx_Register_event_handler(pmix_status_t codes[], size_t ncodes,
|
||||
pmix_info_t info[], size_t ninfo,
|
||||
pmix_notification_fn_t evhdlr,
|
||||
pmix_evhdlr_reg_cbfunc_t cbfunc,
|
||||
void *cbdata);
|
||||
PMIX_EXPORT void PMIx_Register_event_handler(pmix_status_t codes[], size_t ncodes,
|
||||
pmix_info_t info[], size_t ninfo,
|
||||
pmix_notification_fn_t evhdlr,
|
||||
pmix_evhdlr_reg_cbfunc_t cbfunc,
|
||||
void *cbdata);
|
||||
|
||||
/* Deregister an event handler
|
||||
* evhdlr_ref is the reference returned by PMIx from the call to
|
||||
* PMIx_Register_event_handler. If non-NULL, the provided cbfunc
|
||||
* will be called to confirm removal of the designated handler */
|
||||
void PMIx_Deregister_event_handler(size_t evhdlr_ref,
|
||||
pmix_op_cbfunc_t cbfunc,
|
||||
void *cbdata);
|
||||
PMIX_EXPORT void PMIx_Deregister_event_handler(size_t evhdlr_ref,
|
||||
pmix_op_cbfunc_t cbfunc,
|
||||
void *cbdata);
|
||||
|
||||
/* Report an event to a process for notification via any
|
||||
* registered evhdlr. The evhdlr registration can be
|
||||
@ -1575,11 +1583,11 @@ void PMIx_Deregister_event_handler(size_t evhdlr_ref,
|
||||
* time. Note that the caller is required to maintain the input
|
||||
* data until the callback function has been executed!
|
||||
*/
|
||||
pmix_status_t PMIx_Notify_event(pmix_status_t status,
|
||||
const pmix_proc_t *source,
|
||||
pmix_data_range_t range,
|
||||
pmix_info_t info[], size_t ninfo,
|
||||
pmix_op_cbfunc_t cbfunc, void *cbdata);
|
||||
PMIX_EXPORT pmix_status_t PMIx_Notify_event(pmix_status_t status,
|
||||
const pmix_proc_t *source,
|
||||
pmix_data_range_t range,
|
||||
pmix_info_t info[], size_t ninfo,
|
||||
pmix_op_cbfunc_t cbfunc, void *cbdata);
|
||||
|
||||
/* Provide a string representation for several types of value. Note
|
||||
* that the provided string is statically defined and must NOT be
|
||||
@ -1593,24 +1601,24 @@ pmix_status_t PMIx_Notify_event(pmix_status_t status,
|
||||
* - pmix_data_type_t (PMIX_DATA_TYPE)
|
||||
* - pmix_alloc_directive_t (PMIX_ALLOC_DIRECTIVE)
|
||||
*/
|
||||
const char* PMIx_Error_string(pmix_status_t status);
|
||||
const char* PMIx_Proc_state_string(pmix_proc_state_t state);
|
||||
const char* PMIx_Scope_string(pmix_scope_t scope);
|
||||
const char* PMIx_Persistence_string(pmix_persistence_t persist);
|
||||
const char* PMIx_Data_range_string(pmix_data_range_t range);
|
||||
const char* PMIx_Info_directives_string(pmix_info_directives_t directives);
|
||||
const char* PMIx_Data_type_string(pmix_data_type_t type);
|
||||
const char* PMIx_Alloc_directive_string(pmix_alloc_directive_t directive);
|
||||
PMIX_EXPORT const char* PMIx_Error_string(pmix_status_t status);
|
||||
PMIX_EXPORT const char* PMIx_Proc_state_string(pmix_proc_state_t state);
|
||||
PMIX_EXPORT const char* PMIx_Scope_string(pmix_scope_t scope);
|
||||
PMIX_EXPORT const char* PMIx_Persistence_string(pmix_persistence_t persist);
|
||||
PMIX_EXPORT const char* PMIx_Data_range_string(pmix_data_range_t range);
|
||||
PMIX_EXPORT const char* PMIx_Info_directives_string(pmix_info_directives_t directives);
|
||||
PMIX_EXPORT const char* PMIx_Data_type_string(pmix_data_type_t type);
|
||||
PMIX_EXPORT const char* PMIx_Alloc_directive_string(pmix_alloc_directive_t directive);
|
||||
|
||||
/* Get the PMIx version string. Note that the provided string is
|
||||
* statically defined and must NOT be free'd */
|
||||
const char* PMIx_Get_version(void);
|
||||
PMIX_EXPORT const char* PMIx_Get_version(void);
|
||||
|
||||
/* Store some data locally for retrieval by other areas of the
|
||||
* proc. This is data that has only internal scope - it will
|
||||
* never be "pushed" externally */
|
||||
pmix_status_t PMIx_Store_internal(const pmix_proc_t *proc,
|
||||
const char *key, pmix_value_t *val);
|
||||
PMIX_EXPORT pmix_status_t PMIx_Store_internal(const pmix_proc_t *proc,
|
||||
const char *key, pmix_value_t *val);
|
||||
|
||||
|
||||
/**
|
||||
@ -1664,9 +1672,9 @@ pmix_status_t PMIx_Store_internal(const pmix_proc_t *proc,
|
||||
* status_code = PMIx_Data_pack(buffer, &src, 1, PMIX_INT32);
|
||||
* @endcode
|
||||
*/
|
||||
pmix_status_t PMIx_Data_pack(pmix_data_buffer_t *buffer,
|
||||
void *src, int32_t num_vals,
|
||||
pmix_data_type_t type);
|
||||
PMIX_EXPORT pmix_status_t PMIx_Data_pack(pmix_data_buffer_t *buffer,
|
||||
void *src, int32_t num_vals,
|
||||
pmix_data_type_t type);
|
||||
|
||||
/**
|
||||
* Unpack values from a buffer.
|
||||
@ -1760,9 +1768,9 @@ pmix_status_t PMIx_Data_pack(pmix_data_buffer_t *buffer,
|
||||
*
|
||||
* @endcode
|
||||
*/
|
||||
pmix_status_t PMIx_Data_unpack(pmix_data_buffer_t *buffer, void *dest,
|
||||
int32_t *max_num_values,
|
||||
pmix_data_type_t type);
|
||||
PMIX_EXPORT pmix_status_t PMIx_Data_unpack(pmix_data_buffer_t *buffer, void *dest,
|
||||
int32_t *max_num_values,
|
||||
pmix_data_type_t type);
|
||||
|
||||
/**
|
||||
* Copy a data value from one location to another.
|
||||
@ -1787,7 +1795,8 @@ pmix_status_t PMIx_Data_unpack(pmix_data_buffer_t *buffer, void *dest,
|
||||
* @retval PMIX_ERROR(s) An appropriate error code.
|
||||
*
|
||||
*/
|
||||
pmix_status_t PMIx_Data_copy(void **dest, void *src, pmix_data_type_t type);
|
||||
PMIX_EXPORT pmix_status_t PMIx_Data_copy(void **dest, void *src,
|
||||
pmix_data_type_t type);
|
||||
|
||||
/**
|
||||
* Print a data value.
|
||||
@ -1800,8 +1809,8 @@ pmix_status_t PMIx_Data_copy(void **dest, void *src, pmix_data_type_t type);
|
||||
*
|
||||
* @retval PMIX_ERROR(s) An appropriate error code.
|
||||
*/
|
||||
pmix_status_t PMIx_Data_print(char **output, char *prefix,
|
||||
void *src, pmix_data_type_t type);
|
||||
PMIX_EXPORT pmix_status_t PMIx_Data_print(char **output, char *prefix,
|
||||
void *src, pmix_data_type_t type);
|
||||
|
||||
/**
|
||||
* Copy a payload from one buffer to another
|
||||
@ -1812,8 +1821,8 @@ pmix_status_t PMIx_Data_print(char **output, char *prefix,
|
||||
* source buffer's payload will remain intact, as will any pre-existing
|
||||
* payload in the destination's buffer.
|
||||
*/
|
||||
pmix_status_t PMIx_Data_copy_payload(pmix_data_buffer_t *dest,
|
||||
pmix_data_buffer_t *src);
|
||||
PMIX_EXPORT pmix_status_t PMIx_Data_copy_payload(pmix_data_buffer_t *dest,
|
||||
pmix_data_buffer_t *src);
|
||||
|
||||
|
||||
/* Key-Value pair management macros */
|
||||
|
@ -378,13 +378,13 @@ typedef struct pmix_server_module_2_0_0_t {
|
||||
* also may include the PMIX_SERVER_TOOL_SUPPORT key, thereby
|
||||
* indicating that the daemon is willing to accept connection
|
||||
* requests from tools */
|
||||
pmix_status_t PMIx_server_init(pmix_server_module_t *module,
|
||||
pmix_info_t info[], size_t ninfo);
|
||||
PMIX_EXPORT pmix_status_t PMIx_server_init(pmix_server_module_t *module,
|
||||
pmix_info_t info[], size_t ninfo);
|
||||
|
||||
/* Finalize the server support library. If internal comm is
|
||||
* in-use, the server will shut it down at this time. All
|
||||
* memory usage is released */
|
||||
pmix_status_t PMIx_server_finalize(void);
|
||||
PMIX_EXPORT pmix_status_t PMIx_server_finalize(void);
|
||||
|
||||
/* given a semicolon-separated list of input values, generate
|
||||
* a regex that can be passed down to the client for parsing.
|
||||
@ -402,7 +402,7 @@ pmix_status_t PMIx_server_finalize(void);
|
||||
* parsing the provided regex. Other parsers may be supported - see
|
||||
* the pmix_client.h header for a list.
|
||||
*/
|
||||
pmix_status_t PMIx_generate_regex(const char *input, char **regex);
|
||||
PMIX_EXPORT pmix_status_t PMIx_generate_regex(const char *input, char **regex);
|
||||
|
||||
/* The input is expected to consist of a comma-separated list
|
||||
* of ranges. Thus, an input of:
|
||||
@ -415,7 +415,7 @@ pmix_status_t PMIx_generate_regex(const char *input, char **regex);
|
||||
* parsing the provided regex. Other parsers may be supported - see
|
||||
* the pmix_client.h header for a list.
|
||||
*/
|
||||
pmix_status_t PMIx_generate_ppn(const char *input, char **ppn);
|
||||
PMIX_EXPORT pmix_status_t PMIx_generate_ppn(const char *input, char **ppn);
|
||||
|
||||
/* Setup the data about a particular nspace so it can
|
||||
* be passed to any child process upon startup. The PMIx
|
||||
@ -442,7 +442,7 @@ pmix_status_t PMIx_generate_ppn(const char *input, char **ppn);
|
||||
* for the PMIx server library to correctly handle collectives
|
||||
* as a collective operation call can occur before all the
|
||||
* procs have been started */
|
||||
pmix_status_t PMIx_server_register_nspace(const char nspace[], int nlocalprocs,
|
||||
PMIX_EXPORT pmix_status_t PMIx_server_register_nspace(const char nspace[], int nlocalprocs,
|
||||
pmix_info_t info[], size_t ninfo,
|
||||
pmix_op_cbfunc_t cbfunc, void *cbdata);
|
||||
|
||||
@ -451,8 +451,8 @@ pmix_status_t PMIx_server_register_nspace(const char nspace[], int nlocalprocs,
|
||||
* intended to support persistent PMIx servers by providing
|
||||
* an opportunity for the host RM to tell the PMIx server
|
||||
* library to release all memory for a completed job */
|
||||
void PMIx_server_deregister_nspace(const char nspace[],
|
||||
pmix_op_cbfunc_t cbfunc, void *cbdata);
|
||||
PMIX_EXPORT void PMIx_server_deregister_nspace(const char nspace[],
|
||||
pmix_op_cbfunc_t cbfunc, void *cbdata);
|
||||
|
||||
/* Register a client process with the PMIx server library. The
|
||||
* expected user ID and group ID of the child process helps the
|
||||
@ -467,24 +467,24 @@ void PMIx_server_deregister_nspace(const char nspace[],
|
||||
* return that object when the client calls "finalize", thus
|
||||
* allowing the host server to access the object without
|
||||
* performing a lookup. */
|
||||
pmix_status_t PMIx_server_register_client(const pmix_proc_t *proc,
|
||||
uid_t uid, gid_t gid,
|
||||
void *server_object,
|
||||
pmix_op_cbfunc_t cbfunc, void *cbdata);
|
||||
PMIX_EXPORT pmix_status_t PMIx_server_register_client(const pmix_proc_t *proc,
|
||||
uid_t uid, gid_t gid,
|
||||
void *server_object,
|
||||
pmix_op_cbfunc_t cbfunc, void *cbdata);
|
||||
|
||||
/* Deregister a client and purge all data relating to it. The
|
||||
* deregister_nspace API will automatically delete all client
|
||||
* info for that nspace - this API is therefore intended solely
|
||||
* for use in exception cases */
|
||||
void PMIx_server_deregister_client(const pmix_proc_t *proc,
|
||||
pmix_op_cbfunc_t cbfunc, void *cbdata);
|
||||
PMIX_EXPORT void PMIx_server_deregister_client(const pmix_proc_t *proc,
|
||||
pmix_op_cbfunc_t cbfunc, void *cbdata);
|
||||
|
||||
/* Setup the environment of a child process to be forked
|
||||
* by the host so it can correctly interact with the PMIx
|
||||
* server. The PMIx client needs some setup information
|
||||
* so it can properly connect back to the server. This function
|
||||
* will set appropriate environmental variables for this purpose. */
|
||||
pmix_status_t PMIx_server_setup_fork(const pmix_proc_t *proc, char ***env);
|
||||
PMIX_EXPORT pmix_status_t PMIx_server_setup_fork(const pmix_proc_t *proc, char ***env);
|
||||
|
||||
/* Define a callback function the PMIx server will use to return
|
||||
* direct modex requests to the host server. The PMIx server
|
||||
@ -502,9 +502,9 @@ typedef void (*pmix_dmodex_response_fn_t)(pmix_status_t status,
|
||||
* request into the PMIx server. The PMIx server will return a blob
|
||||
* (once it becomes available) via the cbfunc - the host
|
||||
* server shall send the blob back to the original requestor */
|
||||
pmix_status_t PMIx_server_dmodex_request(const pmix_proc_t *proc,
|
||||
pmix_dmodex_response_fn_t cbfunc,
|
||||
void *cbdata);
|
||||
PMIX_EXPORT pmix_status_t PMIx_server_dmodex_request(const pmix_proc_t *proc,
|
||||
pmix_dmodex_response_fn_t cbfunc,
|
||||
void *cbdata);
|
||||
|
||||
/* define a callback function for the setup_application API. The returned info
|
||||
* array is owned by the PMIx server library and will be free'd when the
|
||||
@ -521,18 +521,18 @@ typedef void (*pmix_setup_application_cbfunc_t)(pmix_status_t status,
|
||||
* is defined as a non-blocking operation in case network
|
||||
* libraries need to perform some action before responding. The
|
||||
* returned env will be distributed along with the application */
|
||||
pmix_status_t PMIx_server_setup_application(const char nspace[],
|
||||
pmix_info_t info[], size_t ninfo,
|
||||
pmix_setup_application_cbfunc_t cbfunc, void *cbdata);
|
||||
PMIX_EXPORT pmix_status_t PMIx_server_setup_application(const char nspace[],
|
||||
pmix_info_t info[], size_t ninfo,
|
||||
pmix_setup_application_cbfunc_t cbfunc, void *cbdata);
|
||||
|
||||
/* Provide a function by which the local PMIx server can perform
|
||||
* any application-specific operations prior to spawning local
|
||||
* clients of a given application. For example, a network library
|
||||
* might need to setup the local driver for "instant on" addressing.
|
||||
*/
|
||||
pmix_status_t PMIx_server_setup_local_support(const char nspace[],
|
||||
pmix_info_t info[], size_t ninfo,
|
||||
pmix_op_cbfunc_t cbfunc, void *cbdata);
|
||||
PMIX_EXPORT pmix_status_t PMIx_server_setup_local_support(const char nspace[],
|
||||
pmix_info_t info[], size_t ninfo,
|
||||
pmix_op_cbfunc_t cbfunc, void *cbdata);
|
||||
|
||||
#if defined(c_plusplus) || defined(__cplusplus)
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2013-2016 Intel, Inc. All rights reserved
|
||||
* Copyright (c) 2013-2017 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2015 Artem Y. Polyakov <artpol84@gmail.com>.
|
||||
* All rights reserved.
|
||||
* Copyright (c) 2015 Research Organization for Information Science
|
||||
@ -87,8 +87,8 @@ extern "C" {
|
||||
* and subsequent operations. Passing a _NULL_ value for the array pointer
|
||||
* is supported if no directives are desired.
|
||||
*/
|
||||
pmix_status_t PMIx_tool_init(pmix_proc_t *proc,
|
||||
pmix_info_t info[], size_t ninfo);
|
||||
PMIX_EXPORT pmix_status_t PMIx_tool_init(pmix_proc_t *proc,
|
||||
pmix_info_t info[], size_t ninfo);
|
||||
|
||||
/* Finalize the PMIx tool library, closing the connection to the local server.
|
||||
* An error code will be returned if, for some reason, the connection
|
||||
@ -96,7 +96,7 @@ pmix_status_t PMIx_tool_init(pmix_proc_t *proc,
|
||||
*
|
||||
* The info array is used to pass user requests regarding the finalize
|
||||
* operation. */
|
||||
pmix_status_t PMIx_tool_finalize(void);
|
||||
PMIX_EXPORT pmix_status_t PMIx_tool_finalize(void);
|
||||
|
||||
#if defined(c_plusplus) || defined(__cplusplus)
|
||||
}
|
||||
|
@ -24,7 +24,6 @@
|
||||
ACLOCAL_AMFLAGS = -I ./config
|
||||
|
||||
SUBDIRS = \
|
||||
atomics/asm \
|
||||
util/keyval \
|
||||
mca/base \
|
||||
$(MCA_pmix_FRAMEWORKS_SUBDIRS) \
|
||||
@ -33,7 +32,6 @@ SUBDIRS = \
|
||||
$(MCA_pmix_FRAMEWORK_COMPONENT_DSO_SUBDIRS)
|
||||
|
||||
DIST_SUBDIRS = \
|
||||
atomics/asm \
|
||||
util/keyval \
|
||||
mca/base \
|
||||
$(MCA_pmix_FRAMEWORKS_SUBDIRS) \
|
||||
|
@ -1,92 +0,0 @@
|
||||
#
|
||||
# Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
|
||||
# University Research and Technology
|
||||
# Corporation. All rights reserved.
|
||||
# Copyright (c) 2004-2005 The University of Tennessee and The University
|
||||
# of Tennessee Research Foundation. All rights
|
||||
# reserved.
|
||||
# Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
|
||||
# University of Stuttgart. All rights reserved.
|
||||
# Copyright (c) 2004-2005 The Regents of the University of California.
|
||||
# All rights reserved.
|
||||
# Copyright (c) 2011-2014 Cisco Systems, Inc. All rights reserved.
|
||||
# Copyright (c) 2017 Research Organization for Information Science
|
||||
# and Technology (RIST). All rights reserved.
|
||||
# Copyright (c) 2017 Intel, Inc. All rights reserved.
|
||||
# $COPYRIGHT$
|
||||
#
|
||||
# Additional copyrights may follow
|
||||
#
|
||||
# $HEADER$
|
||||
#
|
||||
|
||||
######################################################################
|
||||
#
|
||||
# This is a bit complicated. If there is anything in the library,
|
||||
# it will always be atomic-asm.S. We just symlink atomic-asm.S to
|
||||
# the best atomic operations available (as determined at configure
|
||||
# time)
|
||||
#
|
||||
######################################################################
|
||||
generated/@PMIX_ASM_FILE@: base/@PMIX_ASSEMBLY_ARCH@.asm
|
||||
@ if test ! -f "$(top_srcdir)/src/atomics/asm/$@" ; then \
|
||||
cmd="$(PERL) '$(top_srcdir)/src/atomics/asm/generate-asm.pl' '@PMIX_ASSEMBLY_ARCH@' '@PMIX_ASSEMBLY_FORMAT@' '$(top_srcdir)/src/atomics/asm/base' '$(top_builddir)/src/atomics/asm/generated/@PMIX_ASM_FILE@'" ; \
|
||||
echo "$$cmd" ; \
|
||||
eval $$cmd ; \
|
||||
fi
|
||||
|
||||
atomic-asm.S: generated/@PMIX_ASM_FILE@
|
||||
rm -f atomic-asm.S
|
||||
@ if test -f "$(top_builddir)/src/atomics/asm/generated/@PMIX_ASM_FILE@" ; then \
|
||||
cmd="ln -s \"$(top_builddir)/src/atomics/asm/generated/@PMIX_ASM_FILE@\" atomic-asm.S" ; \
|
||||
echo "$$cmd" ; \
|
||||
eval $$cmd ; \
|
||||
else \
|
||||
cmd="ln -s \"$(top_srcdir)/src/atomics/asm/generated/@PMIX_ASM_FILE@\" atomic-asm.S" ; \
|
||||
echo "$$cmd" ; \
|
||||
eval $$cmd ; \
|
||||
fi
|
||||
|
||||
if PMIX_HAVE_ASM_FILE
|
||||
nodist_libasm_la_SOURCES = atomic-asm.S
|
||||
libasm_la_DEPENDENCIES = generated/@PMIX_ASM_FILE@
|
||||
else
|
||||
nodist_libasm_la_SOURCES =
|
||||
libasm_la_DEPENDENCIES =
|
||||
endif
|
||||
|
||||
noinst_LTLIBRARIES = libasm.la
|
||||
dist_libasm_la_SOURCES = asm.c
|
||||
|
||||
EXTRA_DIST = \
|
||||
asm-data.txt \
|
||||
generate-asm.pl \
|
||||
generate-all-asm.pl \
|
||||
base/aix.conf \
|
||||
base/default.conf \
|
||||
base/X86_64.asm \
|
||||
base/ARM.asm \
|
||||
base/IA32.asm \
|
||||
base/IA64.asm \
|
||||
base/MIPS.asm \
|
||||
base/POWERPC32.asm \
|
||||
base/POWERPC64.asm \
|
||||
base/SPARCV9_32.asm \
|
||||
base/SPARCV9_64.asm
|
||||
|
||||
######################################################################
|
||||
|
||||
clean-local:
|
||||
rm -f atomic-asm.S
|
||||
|
||||
distclean-local:
|
||||
rm -f generated/atomic-local.s
|
||||
|
||||
######################################################################
|
||||
|
||||
#
|
||||
# Copy over all the generated files
|
||||
#
|
||||
dist-hook:
|
||||
mkdir "${distdir}/generated"
|
||||
$(PERL) "$(top_srcdir)/src/atomics/asm/generate-all-asm.pl" "$(PERL)" "$(srcdir)" "$(distdir)"
|
@ -1,133 +0,0 @@
|
||||
# -*- sh -*-
|
||||
# Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
|
||||
# University Research and Technology
|
||||
# Corporation. All rights reserved.
|
||||
# Copyright (c) 2004-2005 The University of Tennessee and The University
|
||||
# of Tennessee Research Foundation. All rights
|
||||
# reserved.
|
||||
# Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
|
||||
# University of Stuttgart. All rights reserved.
|
||||
# Copyright (c) 2004-2005 The Regents of the University of California.
|
||||
# All rights reserved.
|
||||
# Copyright (c) 2014-2017 Intel, Inc. All rights reserved.
|
||||
# Copyright (c) 2017 Research Organization for Information Science
|
||||
# and Technology (RIST). All rights reserved.
|
||||
# $COPYRIGHT$
|
||||
#
|
||||
# Additional copyrights may follow
|
||||
#
|
||||
# $HEADER$
|
||||
#
|
||||
|
||||
#
|
||||
# Database for mapping architecture and assembly format to prebuilt
|
||||
# assembly files. For explination of the assembly operations, see
|
||||
# the inline assembly header files in src/include/sys/<arch>.
|
||||
#
|
||||
# FORMAT:
|
||||
# ARCHITECTURE ASSEMBLY FORMAT BASE FILENAME
|
||||
#
|
||||
# Assembly Format field:
|
||||
# config_file-text-global-label_suffix-gsym-lsym-type-size-align_log-ppc_r_reg-64_bit-gnu_stack
|
||||
|
||||
######################################################################
|
||||
#
|
||||
# AMD Opteron / Intel EM64T
|
||||
#
|
||||
######################################################################
|
||||
|
||||
X86_64 default-.text-.globl-:--.L-@-1-0-1-1-1 x86_64-linux
|
||||
X86_64 default-.text-.globl-:--.L-@-1-0-1-1-0 x86_64-linux-nongas
|
||||
|
||||
|
||||
######################################################################
|
||||
#
|
||||
# ARM (ARMv7 and later)
|
||||
#
|
||||
######################################################################
|
||||
|
||||
ARM default-.text-.globl-:--.L-#-1-1-1-1-1 arm-linux
|
||||
|
||||
|
||||
######################################################################
|
||||
#
|
||||
# Intel Pentium Class
|
||||
#
|
||||
######################################################################
|
||||
|
||||
IA32 default-.text-.globl-:--.L-@-1-0-1-1-1 ia32-linux
|
||||
IA32 default-.text-.globl-:--.L-@-1-0-1-1-0 ia32-linux-nongas
|
||||
IA32 default-.text-.globl-:-_-L--0-1-1-1-0 ia32-osx
|
||||
IA32 default-.text-.globl-:-_-L--0-0-1-1-1 ia32-cygwin
|
||||
IA32 default-.text-.globl-:-_-L--0-0-1-1-0 ia32-cygwin-nongas
|
||||
|
||||
|
||||
######################################################################
|
||||
#
|
||||
# IA64 (Intel Itanium)
|
||||
#
|
||||
######################################################################
|
||||
|
||||
IA64 default-.text-.globl-:--.L-@-1-0-1-1-1 ia64-linux
|
||||
IA64 default-.text-.globl-:--.L-@-1-0-1-1-0 ia64-linux-nongas
|
||||
|
||||
|
||||
######################################################################
|
||||
#
|
||||
# PowerPC / POWER
|
||||
#
|
||||
######################################################################
|
||||
|
||||
# standard ppc instruction set (AIX calls it ppc). This is not the
|
||||
# true intersection of all the POWER / PowerPC machines, but works
|
||||
# on PowerPCs since the 601 and on at least POWER 3 and above.
|
||||
POWERPC32 default-.text-.globl-:-_-L--0-1-1-0-0 powerpc32-osx
|
||||
POWERPC32 default-.text-.globl-:--.L-@-1-1-0-0-1 powerpc32-linux
|
||||
POWERPC32 default-.text-.globl-:--.L-@-1-1-0-0-0 powerpc32-linux-nongas
|
||||
POWERPC32 aix-.csect .text[PR]-.globl-:-.-L--0-1-0-0-0 powerpc32-aix
|
||||
|
||||
# The ppc code above, plus support for the 64 bit operations. This
|
||||
# mode is really only available on OS X when using the OS X 10.3
|
||||
# compiler chain with the -mcpu=970 option.
|
||||
POWERPC32 default-.text-.globl-:-_-L--0-1-1-1-0 powerpc32-64-osx
|
||||
|
||||
# PowerPC / POWER 64bit machines. sizeof(void*) == 8.
|
||||
POWERPC64 default-.text-.globl-:-_-L--0-1-1-1-0 powerpc64-osx
|
||||
POWERPC64 default-.text-.globl-:-.-.L-@-1-1-0-1-1 powerpc64-linux
|
||||
POWERPC64 default-.text-.globl-:-.-.L-@-1-1-0-1-0 powerpc64-linux-nongas
|
||||
POWERPC64 aix-.csect .text[PR]-.globl-:-.-L--0-1-0-1-0 powerpc64-aix
|
||||
|
||||
|
||||
######################################################################
|
||||
#
|
||||
# SPARC / UltraSPARC (Scalalable Processor ARChitecture)
|
||||
#
|
||||
######################################################################
|
||||
|
||||
# Usually compiled with -xarch=v8plus. Basically Sparc V9, but with
|
||||
# sizeof(void*) == 4 instead of 8. Different from V9_64 because still
|
||||
# uses 2 registers to pass in a 64bit integer
|
||||
SPARCV9_32 default-.text-.globl-:--.L-#-1-0-1-1-0 sparcv9-32-solaris
|
||||
|
||||
# The Sparc v9 (aka Ultra Sparc). Sizeof(void*) == 8.
|
||||
SPARCV9_64 default-.text-.globl-:--.L-#-1-0-1-1-0 sparcv9-64-solaris
|
||||
|
||||
|
||||
######################################################################
|
||||
#
|
||||
# MIPS III (Microprocessor without Interlocked Pipeline Stages)
|
||||
# R4000 and above
|
||||
#
|
||||
######################################################################
|
||||
|
||||
# So MIPS, in it's infinite wisdom (thank you!) decided that when
|
||||
# compiling in 32bit mode and passing in a 64bit integer, it is done
|
||||
# in one register (instead of SPARC and POWER, who use two). Which
|
||||
# means that we can use the same code either way. Woo hoo!
|
||||
|
||||
MIPS default-.text-.globl-:--L--1-1-1-1-0 mips-irix
|
||||
MIPS default-.text-.globl-:--L--1-1-1-1-0 mips64el
|
||||
MIPS default-.text-.globl-:--L-@-1-1-1-1-1 mips64-linux
|
||||
|
||||
# However, this doesn't hold true for 32-bit MIPS as used on Linux.
|
||||
MIPS default-.text-.globl-:--L-@-1-1-1-0-1 mips-linux
|
@ -1,75 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
|
||||
* University Research and Technology
|
||||
* Corporation. All rights reserved.
|
||||
* Copyright (c) 2004-2005 The University of Tennessee and The University
|
||||
* of Tennessee Research Foundation. All rights
|
||||
* reserved.
|
||||
* Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
|
||||
* University of Stuttgart. All rights reserved.
|
||||
* Copyright (c) 2004-2005 The Regents of the University of California.
|
||||
* All rights reserved.
|
||||
* Copyright (c) 2017 Intel, Inc. All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
* Additional copyrights may follow
|
||||
*
|
||||
* $HEADER$
|
||||
*/
|
||||
|
||||
#include "pmix_config.h"
|
||||
|
||||
#include "src/atomics/sys/atomic.h"
|
||||
#include "src/atomics/sys/architecture.h"
|
||||
|
||||
#if PMIX_ASSEMBLY_ARCH == PMIX_SPARC
|
||||
|
||||
#define LOCKS_TABLE_SIZE 8
|
||||
/* make sure to get into reasonably useful bits (so shift at least 5) */
|
||||
#define FIND_LOCK(addr) (&(locks_table[(((unsigned long) addr) >> 8) & \
|
||||
(LOCKS_TABLE_SIZE - 1)]))
|
||||
|
||||
/* have to fix if you change LOCKS_TABLE_SIZE */
|
||||
static pmix_atomic_lock_t locks_table[LOCKS_TABLE_SIZE] = {
|
||||
{ { PMIX_ATOMIC_UNLOCKED } },
|
||||
{ { PMIX_ATOMIC_UNLOCKED } },
|
||||
{ { PMIX_ATOMIC_UNLOCKED } },
|
||||
{ { PMIX_ATOMIC_UNLOCKED } },
|
||||
{ { PMIX_ATOMIC_UNLOCKED } },
|
||||
{ { PMIX_ATOMIC_UNLOCKED } },
|
||||
{ { PMIX_ATOMIC_UNLOCKED } },
|
||||
{ { PMIX_ATOMIC_UNLOCKED } }
|
||||
};
|
||||
|
||||
|
||||
int32_t
|
||||
pmix_atomic_add_32(volatile int32_t *addr, int delta)
|
||||
{
|
||||
int32_t ret;
|
||||
|
||||
pmix_atomic_lock(FIND_LOCK(addr));
|
||||
|
||||
ret = (*addr += delta);
|
||||
|
||||
pmix_atomic_unlock(FIND_LOCK(addr));
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
int32_t
|
||||
pmix_atomic_sub_32(volatile int32_t *addr, int delta)
|
||||
{
|
||||
int32_t ret;
|
||||
|
||||
pmix_atomic_lock(FIND_LOCK(addr));
|
||||
|
||||
ret = (*addr -= delta);
|
||||
|
||||
pmix_atomic_unlock(FIND_LOCK(addr));
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
#endif /* PMIX_ASSEMBLY_ARCH == PMIX_SPARC32 */
|
@ -1,153 +0,0 @@
|
||||
START_FILE
|
||||
TEXT
|
||||
|
||||
ALIGN(4)
|
||||
START_FUNC(pmix_atomic_mb)
|
||||
dmb
|
||||
bx lr
|
||||
END_FUNC(pmix_atomic_mb)
|
||||
|
||||
|
||||
START_FUNC(pmix_atomic_rmb)
|
||||
dmb
|
||||
bx lr
|
||||
END_FUNC(pmix_atomic_rmb)
|
||||
|
||||
|
||||
START_FUNC(pmix_atomic_wmb)
|
||||
dmb
|
||||
bx lr
|
||||
END_FUNC(pmix_atomic_wmb)
|
||||
|
||||
|
||||
START_FUNC(pmix_atomic_cmpset_32)
|
||||
LSYM(1)
|
||||
ldrex r3, [r0]
|
||||
cmp r1, r3
|
||||
bne REFLSYM(2)
|
||||
strex r12, r2, [r0]
|
||||
cmp r12, #0
|
||||
bne REFLSYM(1)
|
||||
mov r0, #1
|
||||
LSYM(2)
|
||||
movne r0, #0
|
||||
bx lr
|
||||
END_FUNC(pmix_atomic_cmpset_32)
|
||||
|
||||
|
||||
START_FUNC(pmix_atomic_cmpset_acq_32)
|
||||
LSYM(3)
|
||||
ldrex r3, [r0]
|
||||
cmp r1, r3
|
||||
bne REFLSYM(4)
|
||||
strex r12, r2, [r0]
|
||||
cmp r12, #0
|
||||
bne REFLSYM(3)
|
||||
dmb
|
||||
mov r0, #1
|
||||
LSYM(4)
|
||||
movne r0, #0
|
||||
bx lr
|
||||
END_FUNC(pmix_atomic_cmpset_acq_32)
|
||||
|
||||
|
||||
START_FUNC(pmix_atomic_cmpset_rel_32)
|
||||
LSYM(5)
|
||||
ldrex r3, [r0]
|
||||
cmp r1, r3
|
||||
bne REFLSYM(6)
|
||||
dmb
|
||||
strex r12, r2, [r0]
|
||||
cmp r12, #0
|
||||
bne REFLSYM(4)
|
||||
mov r0, #1
|
||||
LSYM(6)
|
||||
movne r0, #0
|
||||
bx lr
|
||||
END_FUNC(pmix_atomic_cmpset_rel_32)
|
||||
|
||||
#START_64BIT
|
||||
START_FUNC(pmix_atomic_cmpset_64)
|
||||
push {r4-r7}
|
||||
ldrd r6, r7, [sp, #16]
|
||||
LSYM(7)
|
||||
ldrexd r4, r5, [r0]
|
||||
cmp r4, r2
|
||||
it eq
|
||||
cmpeq r5, r3
|
||||
bne REFLSYM(8)
|
||||
strexd r1, r6, r7, [r0]
|
||||
cmp r1, #0
|
||||
bne REFLSYM(7)
|
||||
mov r0, #1
|
||||
LSYM(8)
|
||||
movne r0, #0
|
||||
pop {r4-r7}
|
||||
bx lr
|
||||
END_FUNC(pmix_atomic_cmpset_64)
|
||||
|
||||
START_FUNC(pmix_atomic_cmpset_acq_64)
|
||||
push {r4-r7}
|
||||
ldrd r6, r7, [sp, #16]
|
||||
LSYM(9)
|
||||
ldrexd r4, r5, [r0]
|
||||
cmp r4, r2
|
||||
it eq
|
||||
cmpeq r5, r3
|
||||
bne REFLSYM(10)
|
||||
strexd r1, r6, r7, [r0]
|
||||
cmp r1, #0
|
||||
bne REFLSYM(9)
|
||||
dmb
|
||||
mov r0, #1
|
||||
LSYM(10)
|
||||
movne r0, #0
|
||||
pop {r4-r7}
|
||||
bx lr
|
||||
END_FUNC(pmix_atomic_cmpset_acq_64)
|
||||
|
||||
|
||||
START_FUNC(pmix_atomic_cmpset_rel_64)
|
||||
push {r4-r7}
|
||||
ldrd r6, r7, [sp, #16]
|
||||
LSYM(11)
|
||||
ldrexd r4, r5, [r0]
|
||||
cmp r4, r2
|
||||
it eq
|
||||
cmpeq r5, r3
|
||||
bne REFLSYM(12)
|
||||
dmb
|
||||
strexd r1, r6, r7, [r0]
|
||||
cmp r1, #0
|
||||
bne REFLSYM(11)
|
||||
mov r0, #1
|
||||
LSYM(12)
|
||||
movne r0, #0
|
||||
pop {r4-r7}
|
||||
bx lr
|
||||
END_FUNC(pmix_atomic_cmpset_rel_64)
|
||||
#END_64BIT
|
||||
|
||||
|
||||
START_FUNC(pmix_atomic_add_32)
|
||||
LSYM(13)
|
||||
ldrex r2, [r0]
|
||||
add r2, r2, r1
|
||||
strex r3, r2, [r0]
|
||||
cmp r3, #0
|
||||
bne REFLSYM(13)
|
||||
mov r0, r2
|
||||
bx lr
|
||||
END_FUNC(pmix_atomic_add_32)
|
||||
|
||||
|
||||
START_FUNC(pmix_atomic_sub_32)
|
||||
LSYM(14)
|
||||
ldrex r2, [r0]
|
||||
sub r2, r2, r1
|
||||
strex r3, r2, [r0]
|
||||
cmp r3, #0
|
||||
bne REFLSYM(14)
|
||||
mov r0, r2
|
||||
bx lr
|
||||
END_FUNC(pmix_atomic_sub_32)
|
@ -1,110 +0,0 @@
|
||||
START_FILE
|
||||
TEXT
|
||||
|
||||
START_FUNC(pmix_atomic_mb)
|
||||
pushl %ebp
|
||||
movl %esp, %ebp
|
||||
leave
|
||||
ret
|
||||
END_FUNC(pmix_atomic_mb)
|
||||
|
||||
|
||||
START_FUNC(pmix_atomic_rmb)
|
||||
pushl %ebp
|
||||
movl %esp, %ebp
|
||||
leave
|
||||
ret
|
||||
END_FUNC(pmix_atomic_rmb)
|
||||
|
||||
|
||||
START_FUNC(pmix_atomic_wmb)
|
||||
pushl %ebp
|
||||
movl %esp, %ebp
|
||||
leave
|
||||
ret
|
||||
END_FUNC(pmix_atomic_wmb)
|
||||
|
||||
|
||||
START_FUNC(pmix_atomic_cmpset_32)
|
||||
pushl %ebp
|
||||
movl %esp, %ebp
|
||||
movl 8(%ebp), %edx
|
||||
movl 16(%ebp), %ecx
|
||||
movl 12(%ebp), %eax
|
||||
lock; cmpxchgl %ecx,(%edx)
|
||||
sete %dl
|
||||
|
||||
movzbl %dl, %eax
|
||||
leave
|
||||
ret
|
||||
END_FUNC(pmix_atomic_cmpset_32)
|
||||
|
||||
|
||||
START_FUNC(pmix_atomic_cmpset_64)
|
||||
pushl %ebp
|
||||
movl %esp, %ebp
|
||||
subl $32, %esp
|
||||
movl %ebx, -12(%ebp)
|
||||
movl %esi, -8(%ebp)
|
||||
movl %edi, -4(%ebp)
|
||||
movl 8(%ebp), %edi
|
||||
movl 12(%ebp), %eax
|
||||
movl 16(%ebp), %edx
|
||||
movl %eax, -24(%ebp)
|
||||
movl %edx, -20(%ebp)
|
||||
movl 20(%ebp), %eax
|
||||
movl 24(%ebp), %edx
|
||||
movl %eax, -32(%ebp)
|
||||
movl %edx, -28(%ebp)
|
||||
movl -24(%ebp), %ebx
|
||||
movl -20(%ebp), %edx
|
||||
movl -32(%ebp), %esi
|
||||
movl -28(%ebp), %ecx
|
||||
movl %ebx, %eax
|
||||
push %ebx
|
||||
movl %esi, %ebx
|
||||
lock; cmpxchg8b (%edi)
|
||||
sete %dl
|
||||
pop %ebx
|
||||
|
||||
movzbl %dl, %eax
|
||||
movl -12(%ebp), %ebx
|
||||
movl -8(%ebp), %esi
|
||||
movl -4(%ebp), %edi
|
||||
movl %ebp, %esp
|
||||
popl %ebp
|
||||
ret
|
||||
END_FUNC(pmix_atomic_cmpset_64)
|
||||
|
||||
|
||||
START_FUNC(pmix_atomic_add_32)
|
||||
pushl %ebp
|
||||
movl %esp, %ebp
|
||||
movl 8(%ebp), %eax
|
||||
movl 12(%ebp), %edx
|
||||
lock; addl %edx,(%eax)
|
||||
movl (%eax), %eax
|
||||
leave
|
||||
ret
|
||||
END_FUNC(pmix_atomic_add_32)
|
||||
|
||||
|
||||
START_FUNC(pmix_atomic_sub_32)
|
||||
pushl %ebp
|
||||
movl %esp, %ebp
|
||||
movl 8(%ebp), %eax
|
||||
movl 12(%ebp), %edx
|
||||
lock; subl %edx,(%eax)
|
||||
movl (%eax), %eax
|
||||
leave
|
||||
ret
|
||||
END_FUNC(pmix_atomic_sub_32)
|
||||
|
||||
|
||||
START_FUNC(pmix_sys_timer_get_cycles)
|
||||
pushl %ebp
|
||||
movl %esp, %ebp
|
||||
rdtsc
|
||||
popl %ebp
|
||||
ret
|
||||
END_FUNC(pmix_sys_timer_get_cycles)
|
@ -1,109 +0,0 @@
|
||||
START_FILE
|
||||
|
||||
.pred.safe_across_calls p1-p5,p16-p63
|
||||
.text
|
||||
.align 16
|
||||
.global pmix_atomic_mb#
|
||||
.proc pmix_atomic_mb#
|
||||
pmix_atomic_mb:
|
||||
.prologue
|
||||
.body
|
||||
mf
|
||||
br.ret.sptk.many b0
|
||||
;;
|
||||
.endp pmix_atomic_mb#
|
||||
.align 16
|
||||
.global pmix_atomic_rmb#
|
||||
.proc pmix_atomic_rmb#
|
||||
pmix_atomic_rmb:
|
||||
.prologue
|
||||
.body
|
||||
mf
|
||||
br.ret.sptk.many b0
|
||||
;;
|
||||
.endp pmix_atomic_rmb#
|
||||
.align 16
|
||||
.global pmix_atomic_wmb#
|
||||
.proc pmix_atomic_wmb#
|
||||
pmix_atomic_wmb:
|
||||
.prologue
|
||||
.body
|
||||
mf
|
||||
br.ret.sptk.many b0
|
||||
;;
|
||||
.endp pmix_atomic_wmb#
|
||||
.align 16
|
||||
.global pmix_atomic_cmpset_acq_32#
|
||||
.proc pmix_atomic_cmpset_acq_32#
|
||||
pmix_atomic_cmpset_acq_32:
|
||||
.prologue
|
||||
.body
|
||||
mov ar.ccv=r33;;
|
||||
cmpxchg4.acq r32=[r32],r34,ar.ccv
|
||||
;;
|
||||
cmp4.eq p6, p7 = r32, r33
|
||||
;;
|
||||
(p6) addl r8 = 1, r0
|
||||
(p7) mov r8 = r0
|
||||
br.ret.sptk.many b0
|
||||
;;
|
||||
.endp pmix_atomic_cmpset_acq_32#
|
||||
.align 16
|
||||
.global pmix_atomic_cmpset_rel_32#
|
||||
.proc pmix_atomic_cmpset_rel_32#
|
||||
pmix_atomic_cmpset_rel_32:
|
||||
.prologue
|
||||
.body
|
||||
mov ar.ccv=r33;;
|
||||
cmpxchg4.rel r32=[r32],r34,ar.ccv
|
||||
;;
|
||||
cmp4.eq p6, p7 = r32, r33
|
||||
;;
|
||||
(p6) addl r8 = 1, r0
|
||||
(p7) mov r8 = r0
|
||||
br.ret.sptk.many b0
|
||||
;;
|
||||
.endp pmix_atomic_cmpset_rel_32#
|
||||
.align 16
|
||||
.global pmix_atomic_cmpset_acq_64#
|
||||
.proc pmix_atomic_cmpset_acq_64#
|
||||
pmix_atomic_cmpset_acq_64:
|
||||
.prologue
|
||||
.body
|
||||
mov ar.ccv=r33;;
|
||||
cmpxchg8.acq r32=[r32],r34,ar.ccv
|
||||
;;
|
||||
cmp.eq p6, p7 = r33, r32
|
||||
;;
|
||||
(p6) addl r8 = 1, r0
|
||||
(p7) mov r8 = r0
|
||||
br.ret.sptk.many b0
|
||||
;;
|
||||
.endp pmix_atomic_cmpset_acq_64#
|
||||
.align 16
|
||||
.global pmix_atomic_cmpset_rel_64#
|
||||
.proc pmix_atomic_cmpset_rel_64#
|
||||
pmix_atomic_cmpset_rel_64:
|
||||
.prologue
|
||||
.body
|
||||
mov ar.ccv=r33;;
|
||||
cmpxchg8.rel r32=[r32],r34,ar.ccv
|
||||
;;
|
||||
cmp.eq p6, p7 = r33, r32
|
||||
;;
|
||||
(p6) addl r8 = 1, r0
|
||||
(p7) mov r8 = r0
|
||||
br.ret.sptk.many b0
|
||||
;;
|
||||
.endp pmix_atomic_cmpset_rel_64#
|
||||
.align 16
|
||||
.global pmix_sys_timer_get_cycles#
|
||||
.proc pmix_sys_timer_get_cycles#
|
||||
pmix_sys_timer_get_cycles:
|
||||
.prologue
|
||||
.body
|
||||
mov r8=ar.itc
|
||||
br.ret.sptk.many b0
|
||||
;;
|
||||
.endp pmix_sys_timer_get_cycles#
|
||||
.ident "GCC: (GNU) 3.2.3 20030502 (Red Hat Linux 3.2.3-49)"
|
@ -1,196 +0,0 @@
|
||||
START_FILE
|
||||
|
||||
#ifdef __linux__
|
||||
#include <sys/asm.h>
|
||||
#else
|
||||
#include <asm.h>
|
||||
#endif
|
||||
#include <regdef.h>
|
||||
|
||||
TEXT
|
||||
|
||||
ALIGN(8)
|
||||
LEAF(pmix_atomic_mb)
|
||||
#ifdef __linux__
|
||||
.set mips2
|
||||
#endif
|
||||
sync
|
||||
#ifdef __linux__
|
||||
.set mips0
|
||||
#endif
|
||||
j ra
|
||||
END(pmix_atomic_mb)
|
||||
|
||||
|
||||
ALIGN(8)
|
||||
LEAF(pmix_atomic_rmb)
|
||||
#ifdef __linux__
|
||||
.set mips2
|
||||
#endif
|
||||
sync
|
||||
#ifdef __linux__
|
||||
.set mips0
|
||||
#endif
|
||||
j ra
|
||||
END(pmix_atomic_rmb)
|
||||
|
||||
|
||||
LEAF(pmix_atomic_wmb)
|
||||
#ifdef __linux__
|
||||
.set mips2
|
||||
#endif
|
||||
sync
|
||||
#ifdef __linux__
|
||||
.set mips0
|
||||
#endif
|
||||
j ra
|
||||
END(pmix_atomic_wmb)
|
||||
|
||||
|
||||
LEAF(pmix_atomic_cmpset_32)
|
||||
.set noreorder
|
||||
retry1:
|
||||
#ifdef __linux__
|
||||
.set mips2
|
||||
#endif
|
||||
ll $3, 0($4)
|
||||
#ifdef __linux__
|
||||
.set mips0
|
||||
#endif
|
||||
bne $3, $5, done1
|
||||
or $2, $6, 0
|
||||
#ifdef __linux__
|
||||
.set mips2
|
||||
#endif
|
||||
sc $2, 0($4)
|
||||
#ifdef __linux__
|
||||
.set mips0
|
||||
#endif
|
||||
beqz $2, retry1
|
||||
done1:
|
||||
xor $3,$3,$5
|
||||
j ra
|
||||
sltu $2,$3,1
|
||||
.set reorder
|
||||
END(pmix_atomic_cmpset_32)
|
||||
|
||||
|
||||
LEAF(pmix_atomic_cmpset_acq_32)
|
||||
.set noreorder
|
||||
retry2:
|
||||
#ifdef __linux__
|
||||
.set mips2
|
||||
#endif
|
||||
ll $3, 0($4)
|
||||
#ifdef __linux__
|
||||
.set mips0
|
||||
#endif
|
||||
bne $3, $5, done2
|
||||
or $2, $6, 0
|
||||
#ifdef __linux__
|
||||
.set mips2
|
||||
#endif
|
||||
sc $2, 0($4)
|
||||
#ifdef __linux__
|
||||
.set mips0
|
||||
#endif
|
||||
beqz $2, retry2
|
||||
done2:
|
||||
#ifdef __linux__
|
||||
.set mips2
|
||||
#endif
|
||||
sync
|
||||
#ifdef __linux__
|
||||
.set mips0
|
||||
#endif
|
||||
xor $3,$3,$5
|
||||
j ra
|
||||
sltu $2,$3,1
|
||||
.set reorder
|
||||
END(pmix_atomic_cmpset_acq_32)
|
||||
|
||||
|
||||
LEAF(pmix_atomic_cmpset_rel_32)
|
||||
.set noreorder
|
||||
#ifdef __linux__
|
||||
.set mips2
|
||||
#endif
|
||||
sync
|
||||
#ifdef __linux__
|
||||
.set mips0
|
||||
#endif
|
||||
retry3:
|
||||
#ifdef __linux__
|
||||
.set mips2
|
||||
#endif
|
||||
ll $3, 0($4)
|
||||
#ifdef __linux__
|
||||
.set mips0
|
||||
#endif
|
||||
bne $3, $5, done3
|
||||
or $2, $6, 0
|
||||
#ifdef __linux__
|
||||
.set mips2
|
||||
#endif
|
||||
sc $2, 0($4)
|
||||
#ifdef __linux__
|
||||
.set mips0
|
||||
#endif
|
||||
beqz $2, retry3
|
||||
done3:
|
||||
xor $3,$3,$5
|
||||
j ra
|
||||
sltu $2,$3,1
|
||||
.set reorder
|
||||
END(pmix_atomic_cmpset_rel_32)
|
||||
|
||||
#ifdef __mips64
|
||||
LEAF(pmix_atomic_cmpset_64)
|
||||
.set noreorder
|
||||
retry4:
|
||||
lld $3, 0($4)
|
||||
bne $3, $5, done4
|
||||
or $2, $6, 0
|
||||
scd $2, 0($4)
|
||||
beqz $2, retry4
|
||||
done4:
|
||||
xor $3,$3,$5
|
||||
j ra
|
||||
sltu $2,$3,1
|
||||
.set reorder
|
||||
END(pmix_atomic_cmpset_64)
|
||||
|
||||
|
||||
LEAF(pmix_atomic_cmpset_acq_64)
|
||||
.set noreorder
|
||||
retry5:
|
||||
lld $3, 0($4)
|
||||
bne $3, $5, done5
|
||||
or $2, $6, 0
|
||||
scd $2, 0($4)
|
||||
beqz $2, retry5
|
||||
done5:
|
||||
sync
|
||||
xor $3,$3,$5
|
||||
j ra
|
||||
sltu $2,$3,1
|
||||
.set reorder
|
||||
END(pmix_atomic_cmpset_acq_64)
|
||||
|
||||
|
||||
LEAF(pmix_atomic_cmpset_rel_64)
|
||||
.set noreorder
|
||||
sync
|
||||
retry6:
|
||||
lld $3, 0($4)
|
||||
bne $3, $5, done6
|
||||
or $2, $6, 0
|
||||
scd $2, 0($4)
|
||||
beqz $2, retry6
|
||||
done6:
|
||||
xor $3,$3,$5
|
||||
j ra
|
||||
sltu $2,$3,1
|
||||
.set reorder
|
||||
END(pmix_atomic_cmpset_rel_64)
|
||||
#endif /* __mips64 */
|
@ -1,168 +0,0 @@
|
||||
START_FILE
|
||||
TEXT
|
||||
|
||||
ALIGN(4)
|
||||
START_FUNC(pmix_atomic_mb)
|
||||
sync
|
||||
blr
|
||||
END_FUNC(pmix_atomic_mb)
|
||||
|
||||
|
||||
START_FUNC(pmix_atomic_rmb)
|
||||
lwsync
|
||||
blr
|
||||
END_FUNC(pmix_atomic_rmb)
|
||||
|
||||
|
||||
START_FUNC(pmix_atomic_wmb)
|
||||
eieio
|
||||
blr
|
||||
END_FUNC(pmix_atomic_wmb)
|
||||
|
||||
|
||||
START_FUNC(pmix_atomic_cmpset_32)
|
||||
LSYM(1) lwarx r0, 0, r3
|
||||
cmpw 0, r0, r4
|
||||
bne- REFLSYM(2)
|
||||
stwcx. r5, 0, r3
|
||||
bne- REFLSYM(1)
|
||||
LSYM(2)
|
||||
xor r3,r0,r4
|
||||
subfic r5,r3,0
|
||||
adde r3,r5,r3
|
||||
blr
|
||||
END_FUNC(pmix_atomic_cmpset_32)
|
||||
|
||||
|
||||
START_FUNC(pmix_atomic_cmpset_acq_32)
|
||||
LSYM(3) lwarx r0, 0, r3
|
||||
cmpw 0, r0, r4
|
||||
bne- REFLSYM(4)
|
||||
stwcx. r5, 0, r3
|
||||
bne- REFLSYM(3)
|
||||
sync
|
||||
LSYM(4)
|
||||
xor r3,r0,r4
|
||||
subfic r5,r3,0
|
||||
adde r3,r5,r3
|
||||
lwsync
|
||||
blr
|
||||
END_FUNC(pmix_atomic_cmpset_acq_32)
|
||||
|
||||
|
||||
START_FUNC(pmix_atomic_cmpset_rel_32)
|
||||
eieio
|
||||
LSYM(5) lwarx r0, 0, r3
|
||||
cmpw 0, r0, r4
|
||||
bne- REFLSYM(6)
|
||||
stwcx. r5, 0, r3
|
||||
bne- REFLSYM(5)
|
||||
sync
|
||||
LSYM(6)
|
||||
xor r3,r0,r4
|
||||
subfic r5,r3,0
|
||||
adde r3,r5,r3
|
||||
blr
|
||||
END_FUNC(pmix_atomic_cmpset_rel_32)
|
||||
|
||||
#START_64BIT
|
||||
START_FUNC(pmix_atomic_cmpset_64)
|
||||
stw r4,-32(r1)
|
||||
stw r5,-28(r1)
|
||||
stw r6,-24(r1)
|
||||
stw r7,-20(r1)
|
||||
ld r5,-32(r1)
|
||||
ld r7,-24(r1)
|
||||
LSYM(7) ldarx r9, 0, r3
|
||||
cmpd 0, r9, r5
|
||||
bne- REFLSYM(8)
|
||||
stdcx. r7, 0, r3
|
||||
bne- REFLSYM(7)
|
||||
LSYM(8)
|
||||
xor r3,r5,r9
|
||||
subfic r5,r3,0
|
||||
adde r3,r5,r3
|
||||
blr
|
||||
END_FUNC(pmix_atomic_cmpset_64)
|
||||
|
||||
|
||||
START_FUNC(pmix_atomic_cmpset_acq_64)
|
||||
stw r4,-32(r1)
|
||||
stw r5,-28(r1)
|
||||
stw r6,-24(r1)
|
||||
stw r7,-20(r1)
|
||||
ld r5,-32(r1)
|
||||
ld r7,-24(r1)
|
||||
|
||||
LSYM(9) ldarx r9, 0, r3
|
||||
cmpd 0, r9, r5
|
||||
bne- REFLSYM(10)
|
||||
stdcx. r7, 0, r3
|
||||
bne- REFLSYM(9)
|
||||
LSYM(10)
|
||||
xor r3,r5,r9
|
||||
subfic r5,r3,0
|
||||
adde r3,r5,r3
|
||||
blr
|
||||
lwsync
|
||||
blr
|
||||
END_FUNC(pmix_atomic_cmpset_acq_64)
|
||||
|
||||
|
||||
START_FUNC(pmix_atomic_cmpset_rel_64)
|
||||
stw r4,-32(r1)
|
||||
stw r5,-28(r1)
|
||||
stw r6,-24(r1)
|
||||
stw r7,-20(r1)
|
||||
ld r5,-32(r1)
|
||||
ld r7,-24(r1)
|
||||
|
||||
eieio
|
||||
LSYM(11) ldarx r9, 0, r3
|
||||
cmpd 0, r9, r5
|
||||
bne- REFLSYM(12)
|
||||
stdcx. r7, 0, r3
|
||||
bne- REFLSYM(11)
|
||||
LSYM(12)
|
||||
xor r3,r5,r9
|
||||
subfic r5,r3,0
|
||||
adde r3,r5,r3
|
||||
blr
|
||||
lwsync
|
||||
blr
|
||||
END_FUNC(pmix_atomic_cmpset_rel_64)
|
||||
#END_64BIT
|
||||
|
||||
|
||||
START_FUNC(pmix_atomic_add_32)
|
||||
LSYM(13) lwarx r0, 0, r3
|
||||
add r0, r4, r0
|
||||
stwcx. r0, 0, r3
|
||||
bne- REFLSYM(13)
|
||||
mr r3,r0
|
||||
blr
|
||||
END_FUNC(pmix_atomic_add_32)
|
||||
|
||||
|
||||
START_FUNC(pmix_atomic_sub_32)
|
||||
LSYM(14) lwarx r0,0,r3
|
||||
subf r0,r4,r0
|
||||
stwcx. r0,0,r3
|
||||
bne- REFLSYM(14)
|
||||
mr r3,r0
|
||||
blr
|
||||
END_FUNC(pmix_atomic_sub_32)
|
||||
|
||||
START_FUNC(pmix_sys_timer_get_cycles)
|
||||
LSYM(15)
|
||||
mftbu r0
|
||||
mftb r11
|
||||
mftbu r2
|
||||
cmpw cr7,r2,r0
|
||||
bne+ cr7,REFLSYM(15)
|
||||
li r4,0
|
||||
li r9,0
|
||||
or r3,r2,r9
|
||||
or r4,r4,r11
|
||||
blr
|
||||
END_FUNC(pmix_sys_timer_get_cycles)
|
@ -1,157 +0,0 @@
|
||||
START_FILE
|
||||
TEXT
|
||||
|
||||
ALIGN(4)
|
||||
START_FUNC(pmix_atomic_mb)
|
||||
sync
|
||||
blr
|
||||
END_FUNC(pmix_atomic_mb)
|
||||
|
||||
|
||||
START_FUNC(pmix_atomic_rmb)
|
||||
lwsync
|
||||
blr
|
||||
END_FUNC(pmix_atomic_rmb)
|
||||
|
||||
|
||||
START_FUNC(pmix_atomic_wmb)
|
||||
eieio
|
||||
blr
|
||||
END_FUNC(pmix_atomic_wmb)
|
||||
|
||||
|
||||
START_FUNC(pmix_atomic_cmpset_32)
|
||||
LSYM(1) lwarx r0, 0, r3
|
||||
cmpw 0, r0, r4
|
||||
bne- REFLSYM(2)
|
||||
stwcx. r5, 0, r3
|
||||
bne- REFLSYM(1)
|
||||
LSYM(2)
|
||||
cmpw cr7,r0,r4
|
||||
mfcr r3
|
||||
rlwinm r3,r3,31,1
|
||||
blr
|
||||
END_FUNC(pmix_atomic_cmpset_32)
|
||||
|
||||
|
||||
START_FUNC(pmix_atomic_cmpset_acq_32)
|
||||
mflr r0
|
||||
std r29,-24(r1)
|
||||
std r0,16(r1)
|
||||
stdu r1,-144(r1)
|
||||
bl REFGSYM(pmix_atomic_cmpset_32)
|
||||
mr r29,r3
|
||||
bl REFGSYM(pmix_atomic_rmb)
|
||||
mr r3,r29
|
||||
addi r1,r1,144
|
||||
ld r0,16(r1)
|
||||
mtlr r0
|
||||
ld r29,-24(r1)
|
||||
blr
|
||||
END_FUNC(pmix_atomic_cmpset_acq_32)
|
||||
|
||||
|
||||
START_FUNC(pmix_atomic_cmpset_rel_32)
|
||||
mflr r0
|
||||
std r27,-40(r1)
|
||||
std r28,-32(r1)
|
||||
std r29,-24(r1)
|
||||
std r0,16(r1)
|
||||
stdu r1,-160(r1)
|
||||
mr r29,r3
|
||||
mr r28,r4
|
||||
mr r27,r5
|
||||
bl REFGSYM(pmix_atomic_wmb)
|
||||
mr r3,r29
|
||||
mr r4,r28
|
||||
mr r5,r27
|
||||
bl REFGSYM(pmix_atomic_cmpset_32)
|
||||
addi r1,r1,160
|
||||
ld r0,16(r1)
|
||||
mtlr r0
|
||||
ld r27,-40(r1)
|
||||
ld r28,-32(r1)
|
||||
ld r29,-24(r1)
|
||||
blr
|
||||
END_FUNC(pmix_atomic_cmpset_rel_32)
|
||||
|
||||
|
||||
START_FUNC(pmix_atomic_cmpset_64)
|
||||
LSYM(3) ldarx r0, 0, r3
|
||||
cmpd 0, r0, r4
|
||||
bne- REFLSYM(4)
|
||||
stdcx. r5, 0, r3
|
||||
bne- REFLSYM(3)
|
||||
LSYM(4)
|
||||
xor r3,r4,r0
|
||||
subfic r5,r3,0
|
||||
adde r3,r5,r3
|
||||
blr
|
||||
END_FUNC(pmix_atomic_cmpset_64)
|
||||
|
||||
|
||||
START_FUNC(pmix_atomic_cmpset_acq_64)
|
||||
LSYM(7) ldarx r0, 0, r3
|
||||
cmpd 0, r0, r4
|
||||
bne- REFLSYM(8)
|
||||
stdcx. r5, 0, r3
|
||||
bne- REFLSYM(7)
|
||||
LSYM(8)
|
||||
lwsync
|
||||
xor r3,r4,r0
|
||||
subfic r5,r3,0
|
||||
adde r3,r5,r3
|
||||
blr
|
||||
END_FUNC(pmix_atomic_cmpset_acq_64)
|
||||
|
||||
|
||||
START_FUNC(pmix_atomic_cmpset_rel_64)
|
||||
eieio
|
||||
LSYM(9) ldarx r0, 0, r3
|
||||
cmpd 0, r0, r4
|
||||
bne- REFLSYM(10)
|
||||
stdcx. r5, 0, r3
|
||||
bne- REFLSYM(9)
|
||||
LSYM(10)
|
||||
xor r3,r4,r0
|
||||
subfic r5,r3,0
|
||||
adde r3,r5,r3
|
||||
blr
|
||||
END_FUNC(pmix_atomic_cmpset_rel_64)
|
||||
|
||||
|
||||
START_FUNC(pmix_atomic_add_32)
|
||||
LSYM(5) lwarx r0, 0, r3
|
||||
add r0, r4, r0
|
||||
stwcx. r0, 0, r3
|
||||
bne- REFLSYM(5)
|
||||
|
||||
mr r3,r0
|
||||
blr
|
||||
END_FUNC(pmix_atomic_add_32)
|
||||
|
||||
|
||||
START_FUNC(pmix_atomic_sub_32)
|
||||
LSYM(6) lwarx r0,0,r3
|
||||
subf r0,r4,r0
|
||||
stwcx. r0,0,r3
|
||||
bne- REFLSYM(6)
|
||||
|
||||
mr r3,r0
|
||||
blr
|
||||
END_FUNC(pmix_atomic_sub_32)
|
||||
|
||||
START_FUNC(pmix_sys_timer_get_cycles)
|
||||
LSYM(11)
|
||||
mftbu r2
|
||||
rldicl r2,r2,0,32
|
||||
mftb r0
|
||||
rldicl r9,r0,0,32
|
||||
mftbu r0
|
||||
rldicl r0,r0,0,32
|
||||
cmpw cr7,r0,r2
|
||||
bne cr7,REFLSYM(11)
|
||||
sldi r3,r0,32
|
||||
or r3,r3,r9
|
||||
blr
|
||||
END_FUNC(pmix_sys_timer_get_cycles)
|
@ -1,171 +0,0 @@
|
||||
START_FILE
|
||||
TEXT
|
||||
|
||||
ALIGN(4)
|
||||
|
||||
|
||||
START_FUNC(pmix_atomic_mb)
|
||||
!#PROLOGUE# 0
|
||||
!#PROLOGUE# 1
|
||||
membar #LoadLoad | #LoadStore | #StoreStore | #StoreLoad
|
||||
retl
|
||||
nop
|
||||
END_FUNC(pmix_atomic_mb)
|
||||
|
||||
|
||||
START_FUNC(pmix_atomic_rmb)
|
||||
!#PROLOGUE# 0
|
||||
!#PROLOGUE# 1
|
||||
membar #LoadLoad
|
||||
retl
|
||||
nop
|
||||
END_FUNC(pmix_atomic_rmb)
|
||||
|
||||
|
||||
START_FUNC(pmix_atomic_wmb)
|
||||
!#PROLOGUE# 0
|
||||
!#PROLOGUE# 1
|
||||
membar #StoreStore
|
||||
retl
|
||||
nop
|
||||
END_FUNC(pmix_atomic_wmb)
|
||||
|
||||
|
||||
START_FUNC(pmix_atomic_cmpset_32)
|
||||
!#PROLOGUE# 0
|
||||
!#PROLOGUE# 1
|
||||
casa [%o0] 0x80, %o1, %o2
|
||||
xor %o2, %o1, %o2
|
||||
subcc %g0, %o2, %g0
|
||||
retl
|
||||
subx %g0, -1, %o0
|
||||
END_FUNC(pmix_atomic_cmpset_32)
|
||||
|
||||
|
||||
START_FUNC(pmix_atomic_cmpset_acq_32)
|
||||
!#PROLOGUE# 0
|
||||
!#PROLOGUE# 1
|
||||
casa [%o0] 0x80, %o1, %o2
|
||||
xor %o2, %o1, %o2
|
||||
subcc %g0, %o2, %g0
|
||||
subx %g0, -1, %o0
|
||||
membar #LoadLoad
|
||||
retl
|
||||
sra %o0, 0, %o0
|
||||
END_FUNC(pmix_atomic_cmpset_acq_32)
|
||||
|
||||
|
||||
START_FUNC(pmix_atomic_cmpset_rel_32)
|
||||
!#PROLOGUE# 0
|
||||
!#PROLOGUE# 1
|
||||
membar #StoreStore
|
||||
casa [%o0] 0x80, %o1, %o2
|
||||
xor %o2, %o1, %o2
|
||||
subcc %g0, %o2, %g0
|
||||
retl
|
||||
subx %g0, -1, %o0
|
||||
END_FUNC(pmix_atomic_cmpset_rel_32)
|
||||
|
||||
|
||||
START_FUNC(pmix_atomic_cmpset_64)
|
||||
!#PROLOGUE# 0
|
||||
save %sp, -128, %sp
|
||||
!#PROLOGUE# 1
|
||||
mov %i3, %o4
|
||||
mov %i4, %o5
|
||||
st %i1, [%fp-32]
|
||||
st %i2, [%fp-28]
|
||||
std %o4, [%fp-24]
|
||||
ldx [%fp-24], %g1
|
||||
ldx [%fp-32], %g2
|
||||
casxa [%i0] 0x80, %g2, %g1
|
||||
stx %g1, [%fp-24]
|
||||
|
||||
ld [%fp-24], %i5
|
||||
ld [%fp-32], %g1
|
||||
cmp %i5, %g1
|
||||
bne REFLSYM(12)
|
||||
mov 0, %i0
|
||||
ld [%fp-20], %i2
|
||||
ld [%fp-28], %i1
|
||||
cmp %i2, %i1
|
||||
be,a REFLSYM(12)
|
||||
mov 1, %i0
|
||||
LSYM(12)
|
||||
ret
|
||||
restore
|
||||
END_FUNC(pmix_atomic_cmpset_64)
|
||||
|
||||
|
||||
START_FUNC(pmix_atomic_cmpset_acq_64)
|
||||
!#PROLOGUE# 0
|
||||
save %sp, -128, %sp
|
||||
!#PROLOGUE# 1
|
||||
mov %i1, %o4
|
||||
mov %i2, %o5
|
||||
mov %i3, %o2
|
||||
mov %i4, %o3
|
||||
std %o4, [%fp-32]
|
||||
std %o2, [%fp-24]
|
||||
ldx [%fp-24], %g1
|
||||
ldx [%fp-32], %g2
|
||||
casxa [%i0] 0x80, %g2, %g1
|
||||
stx %g1, [%fp-24]
|
||||
|
||||
ld [%fp-24], %i5
|
||||
ld [%fp-32], %g1
|
||||
cmp %i5, %g1
|
||||
bne REFLSYM(16)
|
||||
mov 0, %i0
|
||||
ld [%fp-20], %i2
|
||||
ld [%fp-28], %i1
|
||||
cmp %i2, %i1
|
||||
be,a REFLSYM(16)
|
||||
mov 1, %i0
|
||||
LSYM(16)
|
||||
membar #LoadLoad
|
||||
ret
|
||||
restore
|
||||
END_FUNC(pmix_atomic_cmpset_acq_64)
|
||||
|
||||
|
||||
START_FUNC(pmix_atomic_cmpset_rel_64)
|
||||
!#PROLOGUE# 0
|
||||
save %sp, -128, %sp
|
||||
!#PROLOGUE# 1
|
||||
mov %i1, %o4
|
||||
mov %i2, %o5
|
||||
mov %i3, %o2
|
||||
mov %i4, %o3
|
||||
membar #StoreStore
|
||||
std %o4, [%fp-32]
|
||||
std %o2, [%fp-24]
|
||||
ldx [%fp-24], %g1
|
||||
ldx [%fp-32], %g2
|
||||
casxa [%i0] 0x80, %g2, %g1
|
||||
stx %g1, [%fp-24]
|
||||
|
||||
ld [%fp-24], %i5
|
||||
ld [%fp-32], %g1
|
||||
cmp %i5, %g1
|
||||
bne REFLSYM(21)
|
||||
mov 0, %i0
|
||||
ld [%fp-20], %i2
|
||||
ld [%fp-28], %i1
|
||||
cmp %i2, %i1
|
||||
be,a REFLSYM(21)
|
||||
mov 1, %i0
|
||||
LSYM(21)
|
||||
ret
|
||||
restore
|
||||
END_FUNC(pmix_atomic_cmpset_rel_64)
|
||||
|
||||
|
||||
START_FUNC(pmix_sys_timer_get_cycles)
|
||||
save %sp,-96,%sp
|
||||
rd %tick,%o0
|
||||
srlx %o0,32,%o1
|
||||
or %g0,%o1,%i0
|
||||
ret ! Result = %i0
|
||||
restore %o0,0,%o1
|
||||
END_FUNC(pmix_sys_timer_get_cycles)
|
@ -1,111 +0,0 @@
|
||||
START_FILE
|
||||
TEXT
|
||||
|
||||
ALIGN(4)
|
||||
|
||||
|
||||
START_FUNC(pmix_atomic_mb)
|
||||
!#PROLOGUE# 0
|
||||
!#PROLOGUE# 1
|
||||
membar #LoadLoad | #LoadStore | #StoreStore | #StoreLoad
|
||||
retl
|
||||
nop
|
||||
END_FUNC(pmix_atomic_mb)
|
||||
|
||||
|
||||
START_FUNC(pmix_atomic_rmb)
|
||||
!#PROLOGUE# 0
|
||||
!#PROLOGUE# 1
|
||||
membar #LoadLoad
|
||||
retl
|
||||
nop
|
||||
END_FUNC(pmix_atomic_rmb)
|
||||
|
||||
|
||||
START_FUNC(pmix_atomic_wmb)
|
||||
!#PROLOGUE# 0
|
||||
!#PROLOGUE# 1
|
||||
membar #StoreStore
|
||||
retl
|
||||
nop
|
||||
END_FUNC(pmix_atomic_wmb)
|
||||
|
||||
|
||||
START_FUNC(pmix_atomic_cmpset_32)
|
||||
!#PROLOGUE# 0
|
||||
!#PROLOGUE# 1
|
||||
casa [%o0] 0x80, %o1, %o2
|
||||
xor %o2, %o1, %o2
|
||||
subcc %g0, %o2, %g0
|
||||
retl
|
||||
subx %g0, -1, %o0
|
||||
END_FUNC(pmix_atomic_cmpset_32)
|
||||
|
||||
|
||||
START_FUNC(pmix_atomic_cmpset_acq_32)
|
||||
!#PROLOGUE# 0
|
||||
!#PROLOGUE# 1
|
||||
casa [%o0] 0x80, %o1, %o2
|
||||
xor %o2, %o1, %o2
|
||||
subcc %g0, %o2, %g0
|
||||
subx %g0, -1, %o0
|
||||
membar #LoadLoad
|
||||
retl
|
||||
sra %o0, 0, %o0
|
||||
END_FUNC(pmix_atomic_cmpset_acq_32)
|
||||
|
||||
|
||||
START_FUNC(pmix_atomic_cmpset_rel_32)
|
||||
!#PROLOGUE# 0
|
||||
!#PROLOGUE# 1
|
||||
membar #StoreStore
|
||||
casa [%o0] 0x80, %o1, %o2
|
||||
xor %o2, %o1, %o2
|
||||
subcc %g0, %o2, %g0
|
||||
retl
|
||||
subx %g0, -1, %o0
|
||||
END_FUNC(pmix_atomic_cmpset_rel_32)
|
||||
|
||||
|
||||
START_FUNC(pmix_atomic_cmpset_64)
|
||||
!#PROLOGUE# 0
|
||||
!#PROLOGUE# 1
|
||||
casxa [%o0] 0x80, %o1, %o2
|
||||
mov 0, %o0
|
||||
xor %o2, %o1, %o2
|
||||
retl
|
||||
movre %o2, 1, %o0
|
||||
END_FUNC(pmix_atomic_cmpset_64)
|
||||
|
||||
|
||||
START_FUNC(pmix_atomic_cmpset_acq_64)
|
||||
!#PROLOGUE# 0
|
||||
!#PROLOGUE# 1
|
||||
casxa [%o0] 0x80, %o1, %o2
|
||||
mov 0, %o0
|
||||
xor %o2, %o1, %o2
|
||||
movre %o2, 1, %o0
|
||||
membar #LoadLoad
|
||||
retl
|
||||
sra %o0, 0, %o0
|
||||
END_FUNC(pmix_atomic_cmpset_acq_64)
|
||||
|
||||
|
||||
START_FUNC(pmix_atomic_cmpset_rel_64)
|
||||
!#PROLOGUE# 0
|
||||
!#PROLOGUE# 1
|
||||
membar #StoreStore
|
||||
casxa [%o0] 0x80, %o1, %o2
|
||||
mov 0, %o0
|
||||
xor %o2, %o1, %o2
|
||||
retl
|
||||
movre %o2, 1, %o0
|
||||
END_FUNC(pmix_atomic_cmpset_rel_64)
|
||||
|
||||
|
||||
START_FUNC(pmix_sys_timer_get_cycles)
|
||||
save %sp,-176,%sp
|
||||
rd %tick,%o0
|
||||
ret ! Result = %i0
|
||||
restore %o0,0,%o0
|
||||
END_FUNC(pmix_sys_timer_get_cycles)
|
@ -1,52 +0,0 @@
|
||||
START_FILE
|
||||
TEXT
|
||||
|
||||
START_FUNC(pmix_atomic_mb)
|
||||
pushq %rbp
|
||||
movq %rsp, %rbp
|
||||
leave
|
||||
ret
|
||||
END_FUNC(pmix_atomic_mb)
|
||||
|
||||
|
||||
START_FUNC(pmix_atomic_rmb)
|
||||
pushq %rbp
|
||||
movq %rsp, %rbp
|
||||
leave
|
||||
ret
|
||||
END_FUNC(pmix_atomic_rmb)
|
||||
|
||||
|
||||
START_FUNC(pmix_atomic_wmb)
|
||||
pushq %rbp
|
||||
movq %rsp, %rbp
|
||||
leave
|
||||
ret
|
||||
END_FUNC(pmix_atomic_wmb)
|
||||
|
||||
|
||||
START_FUNC(pmix_atomic_cmpset_32)
|
||||
movl %esi, %eax
|
||||
lock; cmpxchgl %edx,(%rdi)
|
||||
sete %dl
|
||||
movzbl %dl, %eax
|
||||
ret
|
||||
END_FUNC(pmix_atomic_cmpset_32)
|
||||
|
||||
|
||||
START_FUNC(pmix_atomic_cmpset_64)
|
||||
movq %rsi, %rax
|
||||
lock; cmpxchgq %rdx,(%rdi)
|
||||
sete %dl
|
||||
movzbl %dl, %eax
|
||||
ret
|
||||
END_FUNC(pmix_atomic_cmpset_64)
|
||||
|
||||
|
||||
START_FUNC(pmix_sys_timer_get_cycles)
|
||||
rdtsc
|
||||
salq $32, %rdx
|
||||
mov %eax, %eax
|
||||
orq %rdx, %rax
|
||||
ret
|
||||
END_FUNC(pmix_sys_timer_get_cycles)
|
@ -1,44 +0,0 @@
|
||||
sub start_file()
|
||||
{
|
||||
my $ret = "";
|
||||
if ($IS64BIT == 1) {
|
||||
$ret .= "\t.machine \"ppc64\"\n";
|
||||
} else {
|
||||
$ret .= "\t.machine \"ppc\"\n";
|
||||
}
|
||||
$ret .= "\t.toc\n";
|
||||
return $ret;
|
||||
}
|
||||
|
||||
|
||||
sub start_func($)
|
||||
{
|
||||
my $func_name = shift;
|
||||
my $ret = "";
|
||||
|
||||
$ret = "\t$GLOBAL $func_name\n";
|
||||
$ret .= "\t$GLOBAL $GSYM$func_name\n";
|
||||
$ret .= "\t.csect [DS],3\n";
|
||||
|
||||
$ret .= "$func_name$SUFFIX\n";
|
||||
|
||||
if ($IS64BIT == 1) {
|
||||
$ret .= "\t.llong .$func_name, TOC[tc0], 0\n";
|
||||
} else {
|
||||
$ret .= "\t.long .$func_name, TOC[tc0], 0\n";
|
||||
}
|
||||
$ret .= "\t.csect [PR]\n";
|
||||
|
||||
$ret .= "\t.align 2\n";
|
||||
$ret .= "$GSYM$func_name$SUFFIX\n";
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
|
||||
sub end_func($)
|
||||
{
|
||||
return "";
|
||||
}
|
||||
|
||||
1
|
@ -1,34 +0,0 @@
|
||||
sub start_file
|
||||
{
|
||||
return "";
|
||||
}
|
||||
|
||||
|
||||
sub start_func($)
|
||||
{
|
||||
my $func_name = shift;
|
||||
my $ret = "";
|
||||
|
||||
$ret = "\t$GLOBAL $GSYM$func_name\n";
|
||||
if (! $TYPE eq "") {
|
||||
$ret .= "\t.type $GSYM$func_name, $TYPE" . "function\n";
|
||||
}
|
||||
$ret .= "$GSYM$func_name$SUFFIX\n";
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
|
||||
sub end_func($)
|
||||
{
|
||||
my $func_name = shift;
|
||||
my $ret = "";
|
||||
|
||||
if ($SIZE != 0) {
|
||||
$ret = "\t.size $GSYM$func_name, .-$GSYM$func_name\n";
|
||||
}
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
1
|
@ -1,27 +0,0 @@
|
||||
#!/usr/bin/perl -w
|
||||
|
||||
my $perl = shift;
|
||||
my $srcdir = shift;
|
||||
my $destdir = shift;
|
||||
|
||||
if (! $perl || ! $srcdir || ! $destdir) {
|
||||
print "ERROR: invalid argument to generate-all-asm.pl\n";
|
||||
print "usage: generate-all-asm.pl [PERL] [SRCDIR] [DESTDIR]\n";
|
||||
exit 1;
|
||||
}
|
||||
|
||||
open(DATAFILE, "$srcdir/asm-data.txt") || die "Could not open data file: $!\n";
|
||||
|
||||
my $ASMARCH = "";
|
||||
my $ASMFORMAT = "";
|
||||
my $ASMFILE = "";
|
||||
|
||||
while(<DATAFILE>) {
|
||||
if (/^#/) { next; }
|
||||
($ASMARCH, $ASMFORMAT, $ASMFILE) = /(.*)\t(.*)\t(.*)/;
|
||||
if (! $ASMARCH || ! $ASMFORMAT) { next; }
|
||||
|
||||
print "--> Generating assembly for \"$ASMARCH\" \"$ASMFORMAT\"\n";
|
||||
system("$perl \'$srcdir/generate-asm.pl\' \'$ASMARCH\' \'$ASMFORMAT\' \'$srcdir/base\' \'$destdir/generated/atomic-$ASMFILE.s\'");
|
||||
|
||||
}
|
@ -1,123 +0,0 @@
|
||||
#!/usr/bin/perl -w
|
||||
#
|
||||
# Copyright (c) 2014 Cisco Systems, Inc. All rights reserved.
|
||||
# Copyright (c) 2017 Intel, Inc. All rights reserved.
|
||||
# $COPYRIGHT$
|
||||
#
|
||||
# Additional copyrights may follow
|
||||
#
|
||||
# $HEADER$
|
||||
#
|
||||
|
||||
|
||||
my $asmarch = shift;
|
||||
my $asmformat = shift;
|
||||
my $basedir = shift;
|
||||
my $output = shift;
|
||||
|
||||
if ( ! $asmarch) {
|
||||
print "usage: generate-asm.pl [ASMARCH] [ASMFORMAT] [BASEDIR] [OUTPUT NAME]\n";
|
||||
exit(1);
|
||||
}
|
||||
|
||||
open(INPUT, "$basedir/$asmarch.asm") ||
|
||||
die "Could not open $basedir/$asmarch.asm: $!\n";
|
||||
open(OUTPUT, ">$output") || die "Could not open $output: $!\n";
|
||||
|
||||
$CONFIG = "default";
|
||||
$TEXT = "";
|
||||
$GLOBAL = "";
|
||||
$SUFFIX = "";
|
||||
$GSYM = "";
|
||||
$LSYM = "";
|
||||
$TYPE = "";
|
||||
$SIZE = 0;
|
||||
$ALIGN_LOG = 0;
|
||||
$DEL_R_REG = 0;
|
||||
$IS64BIT = 0;
|
||||
|
||||
($CONFIG, $TEXT, $GLOBAL, $SUFFIX, $GSYM, $LSYM, $TYPE, $SIZE, $ALIGN_LOG, $DEL_R_REG, $IS64BIT, $GNU_STACK) = (
|
||||
$asmformat =~ /(.*)\-(.*)\-(.*)\-(.*)\-(.*)\-(.*)\-(.*)\-(.*)\-(.*)\-(.*)\-(.*)\-(.*)/);
|
||||
|
||||
if (0) {
|
||||
print "$asmformat\n";
|
||||
print "CONFIG: $CONFIG\n";
|
||||
print "TEXT: $TEXT\n";
|
||||
print "GLOBAL: $GLOBAL\n";
|
||||
print "SUFFIX: $SUFFIX\n";
|
||||
print "GSYM: $GSYM\n";
|
||||
print "LSYM: $LSYM\n";
|
||||
print "GNU_STACK: $GNU_STACK\n";
|
||||
}
|
||||
|
||||
my $current_func = "";
|
||||
my $delete = 0;
|
||||
|
||||
# load our configuration
|
||||
do "$basedir/$CONFIG.conf" or die "Could not open config file $basedir/$CONFIG.conf: $!\n";
|
||||
|
||||
while (<INPUT>) {
|
||||
s/TEXT/$TEXT/g;
|
||||
s/GLOBAL/$GLOBAL/g;
|
||||
s/REFGSYM\((.*)\)/$GSYM$1/g;
|
||||
s/REFLSYM\((.*)\)/$LSYM$1/g;
|
||||
s/GSYM\((.*)\)/$GSYM$1$SUFFIX/g;
|
||||
s/LSYM\((.*)\)/$LSYM$1$SUFFIX/g;
|
||||
|
||||
if ($DEL_R_REG == 0) {
|
||||
s/cr([0-9][0-9]?)/$1/g;
|
||||
s/r([0-9][0-9]?)/$1/g;
|
||||
}
|
||||
|
||||
if (/START_FILE/) {
|
||||
$_ = start_file();
|
||||
}
|
||||
|
||||
if (/START_FUNC\((.*)\)/) {
|
||||
$current_func = $1;
|
||||
$_ = start_func($current_func);
|
||||
}
|
||||
|
||||
if (/END_FUNC\((.*)\)/) {
|
||||
$current_func = $1;
|
||||
$_ = end_func($current_func);
|
||||
}
|
||||
|
||||
if ($ALIGN_LOG == 0) {
|
||||
s/ALIGN\((\d*)\)/.align $1/g;
|
||||
} else {
|
||||
# Ugh...
|
||||
if (m/ALIGN\((\d*)\)/) {
|
||||
$val = $1;
|
||||
$result = 0;
|
||||
while ($val > 1) { $val /= 2; $result++ }
|
||||
s/ALIGN\((\d*)\)/.align $result/;
|
||||
}
|
||||
}
|
||||
|
||||
if (/^\#START_64BIT/) {
|
||||
$_ = "";
|
||||
if ($IS64BIT == 0) {
|
||||
$delete = 1;
|
||||
}
|
||||
}
|
||||
if (/^\#END_64BIT/) {
|
||||
$_ = "";
|
||||
$delete = 0;
|
||||
}
|
||||
|
||||
if ($delete == 0) {
|
||||
print OUTPUT $_;
|
||||
}
|
||||
}
|
||||
|
||||
if ($GNU_STACK == 1) {
|
||||
if ($asmarch eq "ARM") {
|
||||
print OUTPUT "\n\t.section\t.note.GNU-stack,\"\",\%progbits\n";
|
||||
} else {
|
||||
print OUTPUT "\n\t.section\t.note.GNU-stack,\"\",\@progbits\n";
|
||||
}
|
||||
}
|
||||
|
||||
close(INPUT);
|
||||
close(OUTPUT);
|
@ -1,109 +0,0 @@
|
||||
.text
|
||||
|
||||
.globl _pmix_atomic_mb
|
||||
_pmix_atomic_mb:
|
||||
pushl %ebp
|
||||
movl %esp, %ebp
|
||||
leave
|
||||
ret
|
||||
|
||||
|
||||
.globl _pmix_atomic_rmb
|
||||
_pmix_atomic_rmb:
|
||||
pushl %ebp
|
||||
movl %esp, %ebp
|
||||
leave
|
||||
ret
|
||||
|
||||
|
||||
.globl _pmix_atomic_wmb
|
||||
_pmix_atomic_wmb:
|
||||
pushl %ebp
|
||||
movl %esp, %ebp
|
||||
leave
|
||||
ret
|
||||
|
||||
|
||||
.globl _pmix_atomic_cmpset_32
|
||||
_pmix_atomic_cmpset_32:
|
||||
pushl %ebp
|
||||
movl %esp, %ebp
|
||||
movl 8(%ebp), %edx
|
||||
movl 16(%ebp), %ecx
|
||||
movl 12(%ebp), %eax
|
||||
lock; cmpxchgl %ecx,(%edx)
|
||||
sete %dl
|
||||
|
||||
movzbl %dl, %eax
|
||||
leave
|
||||
ret
|
||||
|
||||
|
||||
.globl _pmix_atomic_cmpset_64
|
||||
_pmix_atomic_cmpset_64:
|
||||
pushl %ebp
|
||||
movl %esp, %ebp
|
||||
subl $32, %esp
|
||||
movl %ebx, -12(%ebp)
|
||||
movl %esi, -8(%ebp)
|
||||
movl %edi, -4(%ebp)
|
||||
movl 8(%ebp), %edi
|
||||
movl 12(%ebp), %eax
|
||||
movl 16(%ebp), %edx
|
||||
movl %eax, -24(%ebp)
|
||||
movl %edx, -20(%ebp)
|
||||
movl 20(%ebp), %eax
|
||||
movl 24(%ebp), %edx
|
||||
movl %eax, -32(%ebp)
|
||||
movl %edx, -28(%ebp)
|
||||
movl -24(%ebp), %ebx
|
||||
movl -20(%ebp), %edx
|
||||
movl -32(%ebp), %esi
|
||||
movl -28(%ebp), %ecx
|
||||
movl %ebx, %eax
|
||||
push %ebx
|
||||
movl %esi, %ebx
|
||||
lock; cmpxchg8b (%edi)
|
||||
sete %dl
|
||||
pop %ebx
|
||||
|
||||
movzbl %dl, %eax
|
||||
movl -12(%ebp), %ebx
|
||||
movl -8(%ebp), %esi
|
||||
movl -4(%ebp), %edi
|
||||
movl %ebp, %esp
|
||||
popl %ebp
|
||||
ret
|
||||
|
||||
|
||||
.globl _pmix_atomic_add_32
|
||||
_pmix_atomic_add_32:
|
||||
pushl %ebp
|
||||
movl %esp, %ebp
|
||||
movl 8(%ebp), %eax
|
||||
movl 12(%ebp), %edx
|
||||
lock; addl %edx,(%eax)
|
||||
movl (%eax), %eax
|
||||
leave
|
||||
ret
|
||||
|
||||
|
||||
.globl _pmix_atomic_sub_32
|
||||
_pmix_atomic_sub_32:
|
||||
pushl %ebp
|
||||
movl %esp, %ebp
|
||||
movl 8(%ebp), %eax
|
||||
movl 12(%ebp), %edx
|
||||
lock; subl %edx,(%eax)
|
||||
movl (%eax), %eax
|
||||
leave
|
||||
ret
|
||||
|
||||
|
||||
.globl _pmix_sys_timer_get_cycles
|
||||
_pmix_sys_timer_get_cycles:
|
||||
pushl %ebp
|
||||
movl %esp, %ebp
|
||||
rdtsc
|
||||
popl %ebp
|
||||
ret
|
@ -1,111 +0,0 @@
|
||||
.text
|
||||
|
||||
.globl _pmix_atomic_mb
|
||||
_pmix_atomic_mb:
|
||||
pushl %ebp
|
||||
movl %esp, %ebp
|
||||
leave
|
||||
ret
|
||||
|
||||
|
||||
.globl _pmix_atomic_rmb
|
||||
_pmix_atomic_rmb:
|
||||
pushl %ebp
|
||||
movl %esp, %ebp
|
||||
leave
|
||||
ret
|
||||
|
||||
|
||||
.globl _pmix_atomic_wmb
|
||||
_pmix_atomic_wmb:
|
||||
pushl %ebp
|
||||
movl %esp, %ebp
|
||||
leave
|
||||
ret
|
||||
|
||||
|
||||
.globl _pmix_atomic_cmpset_32
|
||||
_pmix_atomic_cmpset_32:
|
||||
pushl %ebp
|
||||
movl %esp, %ebp
|
||||
movl 8(%ebp), %edx
|
||||
movl 16(%ebp), %ecx
|
||||
movl 12(%ebp), %eax
|
||||
lock; cmpxchgl %ecx,(%edx)
|
||||
sete %dl
|
||||
|
||||
movzbl %dl, %eax
|
||||
leave
|
||||
ret
|
||||
|
||||
|
||||
.globl _pmix_atomic_cmpset_64
|
||||
_pmix_atomic_cmpset_64:
|
||||
pushl %ebp
|
||||
movl %esp, %ebp
|
||||
subl $32, %esp
|
||||
movl %ebx, -12(%ebp)
|
||||
movl %esi, -8(%ebp)
|
||||
movl %edi, -4(%ebp)
|
||||
movl 8(%ebp), %edi
|
||||
movl 12(%ebp), %eax
|
||||
movl 16(%ebp), %edx
|
||||
movl %eax, -24(%ebp)
|
||||
movl %edx, -20(%ebp)
|
||||
movl 20(%ebp), %eax
|
||||
movl 24(%ebp), %edx
|
||||
movl %eax, -32(%ebp)
|
||||
movl %edx, -28(%ebp)
|
||||
movl -24(%ebp), %ebx
|
||||
movl -20(%ebp), %edx
|
||||
movl -32(%ebp), %esi
|
||||
movl -28(%ebp), %ecx
|
||||
movl %ebx, %eax
|
||||
push %ebx
|
||||
movl %esi, %ebx
|
||||
lock; cmpxchg8b (%edi)
|
||||
sete %dl
|
||||
pop %ebx
|
||||
|
||||
movzbl %dl, %eax
|
||||
movl -12(%ebp), %ebx
|
||||
movl -8(%ebp), %esi
|
||||
movl -4(%ebp), %edi
|
||||
movl %ebp, %esp
|
||||
popl %ebp
|
||||
ret
|
||||
|
||||
|
||||
.globl _pmix_atomic_add_32
|
||||
_pmix_atomic_add_32:
|
||||
pushl %ebp
|
||||
movl %esp, %ebp
|
||||
movl 8(%ebp), %eax
|
||||
movl 12(%ebp), %edx
|
||||
lock; addl %edx,(%eax)
|
||||
movl (%eax), %eax
|
||||
leave
|
||||
ret
|
||||
|
||||
|
||||
.globl _pmix_atomic_sub_32
|
||||
_pmix_atomic_sub_32:
|
||||
pushl %ebp
|
||||
movl %esp, %ebp
|
||||
movl 8(%ebp), %eax
|
||||
movl 12(%ebp), %edx
|
||||
lock; subl %edx,(%eax)
|
||||
movl (%eax), %eax
|
||||
leave
|
||||
ret
|
||||
|
||||
|
||||
.globl _pmix_sys_timer_get_cycles
|
||||
_pmix_sys_timer_get_cycles:
|
||||
pushl %ebp
|
||||
movl %esp, %ebp
|
||||
rdtsc
|
||||
popl %ebp
|
||||
ret
|
||||
|
||||
.section .note.GNU-stack,"",@progbits
|
@ -1,125 +0,0 @@
|
||||
.text
|
||||
|
||||
.globl pmix_atomic_mb
|
||||
.type pmix_atomic_mb, @function
|
||||
pmix_atomic_mb:
|
||||
pushl %ebp
|
||||
movl %esp, %ebp
|
||||
leave
|
||||
ret
|
||||
.size pmix_atomic_mb, .-pmix_atomic_mb
|
||||
|
||||
|
||||
.globl pmix_atomic_rmb
|
||||
.type pmix_atomic_rmb, @function
|
||||
pmix_atomic_rmb:
|
||||
pushl %ebp
|
||||
movl %esp, %ebp
|
||||
leave
|
||||
ret
|
||||
.size pmix_atomic_rmb, .-pmix_atomic_rmb
|
||||
|
||||
|
||||
.globl pmix_atomic_wmb
|
||||
.type pmix_atomic_wmb, @function
|
||||
pmix_atomic_wmb:
|
||||
pushl %ebp
|
||||
movl %esp, %ebp
|
||||
leave
|
||||
ret
|
||||
.size pmix_atomic_wmb, .-pmix_atomic_wmb
|
||||
|
||||
|
||||
.globl pmix_atomic_cmpset_32
|
||||
.type pmix_atomic_cmpset_32, @function
|
||||
pmix_atomic_cmpset_32:
|
||||
pushl %ebp
|
||||
movl %esp, %ebp
|
||||
movl 8(%ebp), %edx
|
||||
movl 16(%ebp), %ecx
|
||||
movl 12(%ebp), %eax
|
||||
lock; cmpxchgl %ecx,(%edx)
|
||||
sete %dl
|
||||
|
||||
movzbl %dl, %eax
|
||||
leave
|
||||
ret
|
||||
.size pmix_atomic_cmpset_32, .-pmix_atomic_cmpset_32
|
||||
|
||||
|
||||
.globl pmix_atomic_cmpset_64
|
||||
.type pmix_atomic_cmpset_64, @function
|
||||
pmix_atomic_cmpset_64:
|
||||
pushl %ebp
|
||||
movl %esp, %ebp
|
||||
subl $32, %esp
|
||||
movl %ebx, -12(%ebp)
|
||||
movl %esi, -8(%ebp)
|
||||
movl %edi, -4(%ebp)
|
||||
movl 8(%ebp), %edi
|
||||
movl 12(%ebp), %eax
|
||||
movl 16(%ebp), %edx
|
||||
movl %eax, -24(%ebp)
|
||||
movl %edx, -20(%ebp)
|
||||
movl 20(%ebp), %eax
|
||||
movl 24(%ebp), %edx
|
||||
movl %eax, -32(%ebp)
|
||||
movl %edx, -28(%ebp)
|
||||
movl -24(%ebp), %ebx
|
||||
movl -20(%ebp), %edx
|
||||
movl -32(%ebp), %esi
|
||||
movl -28(%ebp), %ecx
|
||||
movl %ebx, %eax
|
||||
push %ebx
|
||||
movl %esi, %ebx
|
||||
lock; cmpxchg8b (%edi)
|
||||
sete %dl
|
||||
pop %ebx
|
||||
|
||||
movzbl %dl, %eax
|
||||
movl -12(%ebp), %ebx
|
||||
movl -8(%ebp), %esi
|
||||
movl -4(%ebp), %edi
|
||||
movl %ebp, %esp
|
||||
popl %ebp
|
||||
ret
|
||||
.size pmix_atomic_cmpset_64, .-pmix_atomic_cmpset_64
|
||||
|
||||
|
||||
.globl pmix_atomic_add_32
|
||||
.type pmix_atomic_add_32, @function
|
||||
pmix_atomic_add_32:
|
||||
pushl %ebp
|
||||
movl %esp, %ebp
|
||||
movl 8(%ebp), %eax
|
||||
movl 12(%ebp), %edx
|
||||
lock; addl %edx,(%eax)
|
||||
movl (%eax), %eax
|
||||
leave
|
||||
ret
|
||||
.size pmix_atomic_add_32, .-pmix_atomic_add_32
|
||||
|
||||
|
||||
.globl pmix_atomic_sub_32
|
||||
.type pmix_atomic_sub_32, @function
|
||||
pmix_atomic_sub_32:
|
||||
pushl %ebp
|
||||
movl %esp, %ebp
|
||||
movl 8(%ebp), %eax
|
||||
movl 12(%ebp), %edx
|
||||
lock; subl %edx,(%eax)
|
||||
movl (%eax), %eax
|
||||
leave
|
||||
ret
|
||||
.size pmix_atomic_sub_32, .-pmix_atomic_sub_32
|
||||
|
||||
|
||||
.globl pmix_sys_timer_get_cycles
|
||||
.type pmix_sys_timer_get_cycles, @function
|
||||
pmix_sys_timer_get_cycles:
|
||||
pushl %ebp
|
||||
movl %esp, %ebp
|
||||
rdtsc
|
||||
popl %ebp
|
||||
ret
|
||||
.size pmix_sys_timer_get_cycles, .-pmix_sys_timer_get_cycles
|
@ -1,127 +0,0 @@
|
||||
.text
|
||||
|
||||
.globl pmix_atomic_mb
|
||||
.type pmix_atomic_mb, @function
|
||||
pmix_atomic_mb:
|
||||
pushl %ebp
|
||||
movl %esp, %ebp
|
||||
leave
|
||||
ret
|
||||
.size pmix_atomic_mb, .-pmix_atomic_mb
|
||||
|
||||
|
||||
.globl pmix_atomic_rmb
|
||||
.type pmix_atomic_rmb, @function
|
||||
pmix_atomic_rmb:
|
||||
pushl %ebp
|
||||
movl %esp, %ebp
|
||||
leave
|
||||
ret
|
||||
.size pmix_atomic_rmb, .-pmix_atomic_rmb
|
||||
|
||||
|
||||
.globl pmix_atomic_wmb
|
||||
.type pmix_atomic_wmb, @function
|
||||
pmix_atomic_wmb:
|
||||
pushl %ebp
|
||||
movl %esp, %ebp
|
||||
leave
|
||||
ret
|
||||
.size pmix_atomic_wmb, .-pmix_atomic_wmb
|
||||
|
||||
|
||||
.globl pmix_atomic_cmpset_32
|
||||
.type pmix_atomic_cmpset_32, @function
|
||||
pmix_atomic_cmpset_32:
|
||||
pushl %ebp
|
||||
movl %esp, %ebp
|
||||
movl 8(%ebp), %edx
|
||||
movl 16(%ebp), %ecx
|
||||
movl 12(%ebp), %eax
|
||||
lock; cmpxchgl %ecx,(%edx)
|
||||
sete %dl
|
||||
|
||||
movzbl %dl, %eax
|
||||
leave
|
||||
ret
|
||||
.size pmix_atomic_cmpset_32, .-pmix_atomic_cmpset_32
|
||||
|
||||
|
||||
.globl pmix_atomic_cmpset_64
|
||||
.type pmix_atomic_cmpset_64, @function
|
||||
pmix_atomic_cmpset_64:
|
||||
pushl %ebp
|
||||
movl %esp, %ebp
|
||||
subl $32, %esp
|
||||
movl %ebx, -12(%ebp)
|
||||
movl %esi, -8(%ebp)
|
||||
movl %edi, -4(%ebp)
|
||||
movl 8(%ebp), %edi
|
||||
movl 12(%ebp), %eax
|
||||
movl 16(%ebp), %edx
|
||||
movl %eax, -24(%ebp)
|
||||
movl %edx, -20(%ebp)
|
||||
movl 20(%ebp), %eax
|
||||
movl 24(%ebp), %edx
|
||||
movl %eax, -32(%ebp)
|
||||
movl %edx, -28(%ebp)
|
||||
movl -24(%ebp), %ebx
|
||||
movl -20(%ebp), %edx
|
||||
movl -32(%ebp), %esi
|
||||
movl -28(%ebp), %ecx
|
||||
movl %ebx, %eax
|
||||
push %ebx
|
||||
movl %esi, %ebx
|
||||
lock; cmpxchg8b (%edi)
|
||||
sete %dl
|
||||
pop %ebx
|
||||
|
||||
movzbl %dl, %eax
|
||||
movl -12(%ebp), %ebx
|
||||
movl -8(%ebp), %esi
|
||||
movl -4(%ebp), %edi
|
||||
movl %ebp, %esp
|
||||
popl %ebp
|
||||
ret
|
||||
.size pmix_atomic_cmpset_64, .-pmix_atomic_cmpset_64
|
||||
|
||||
|
||||
.globl pmix_atomic_add_32
|
||||
.type pmix_atomic_add_32, @function
|
||||
pmix_atomic_add_32:
|
||||
pushl %ebp
|
||||
movl %esp, %ebp
|
||||
movl 8(%ebp), %eax
|
||||
movl 12(%ebp), %edx
|
||||
lock; addl %edx,(%eax)
|
||||
movl (%eax), %eax
|
||||
leave
|
||||
ret
|
||||
.size pmix_atomic_add_32, .-pmix_atomic_add_32
|
||||
|
||||
|
||||
.globl pmix_atomic_sub_32
|
||||
.type pmix_atomic_sub_32, @function
|
||||
pmix_atomic_sub_32:
|
||||
pushl %ebp
|
||||
movl %esp, %ebp
|
||||
movl 8(%ebp), %eax
|
||||
movl 12(%ebp), %edx
|
||||
lock; subl %edx,(%eax)
|
||||
movl (%eax), %eax
|
||||
leave
|
||||
ret
|
||||
.size pmix_atomic_sub_32, .-pmix_atomic_sub_32
|
||||
|
||||
|
||||
.globl pmix_sys_timer_get_cycles
|
||||
.type pmix_sys_timer_get_cycles, @function
|
||||
pmix_sys_timer_get_cycles:
|
||||
pushl %ebp
|
||||
movl %esp, %ebp
|
||||
rdtsc
|
||||
popl %ebp
|
||||
ret
|
||||
.size pmix_sys_timer_get_cycles, .-pmix_sys_timer_get_cycles
|
||||
|
||||
.section .note.GNU-stack,"",@progbits
|
@ -1,109 +0,0 @@
|
||||
.text
|
||||
|
||||
.globl _pmix_atomic_mb
|
||||
_pmix_atomic_mb:
|
||||
pushl %ebp
|
||||
movl %esp, %ebp
|
||||
leave
|
||||
ret
|
||||
|
||||
|
||||
.globl _pmix_atomic_rmb
|
||||
_pmix_atomic_rmb:
|
||||
pushl %ebp
|
||||
movl %esp, %ebp
|
||||
leave
|
||||
ret
|
||||
|
||||
|
||||
.globl _pmix_atomic_wmb
|
||||
_pmix_atomic_wmb:
|
||||
pushl %ebp
|
||||
movl %esp, %ebp
|
||||
leave
|
||||
ret
|
||||
|
||||
|
||||
.globl _pmix_atomic_cmpset_32
|
||||
_pmix_atomic_cmpset_32:
|
||||
pushl %ebp
|
||||
movl %esp, %ebp
|
||||
movl 8(%ebp), %edx
|
||||
movl 16(%ebp), %ecx
|
||||
movl 12(%ebp), %eax
|
||||
lock; cmpxchgl %ecx,(%edx)
|
||||
sete %dl
|
||||
|
||||
movzbl %dl, %eax
|
||||
leave
|
||||
ret
|
||||
|
||||
|
||||
.globl _pmix_atomic_cmpset_64
|
||||
_pmix_atomic_cmpset_64:
|
||||
pushl %ebp
|
||||
movl %esp, %ebp
|
||||
subl $32, %esp
|
||||
movl %ebx, -12(%ebp)
|
||||
movl %esi, -8(%ebp)
|
||||
movl %edi, -4(%ebp)
|
||||
movl 8(%ebp), %edi
|
||||
movl 12(%ebp), %eax
|
||||
movl 16(%ebp), %edx
|
||||
movl %eax, -24(%ebp)
|
||||
movl %edx, -20(%ebp)
|
||||
movl 20(%ebp), %eax
|
||||
movl 24(%ebp), %edx
|
||||
movl %eax, -32(%ebp)
|
||||
movl %edx, -28(%ebp)
|
||||
movl -24(%ebp), %ebx
|
||||
movl -20(%ebp), %edx
|
||||
movl -32(%ebp), %esi
|
||||
movl -28(%ebp), %ecx
|
||||
movl %ebx, %eax
|
||||
push %ebx
|
||||
movl %esi, %ebx
|
||||
lock; cmpxchg8b (%edi)
|
||||
sete %dl
|
||||
pop %ebx
|
||||
|
||||
movzbl %dl, %eax
|
||||
movl -12(%ebp), %ebx
|
||||
movl -8(%ebp), %esi
|
||||
movl -4(%ebp), %edi
|
||||
movl %ebp, %esp
|
||||
popl %ebp
|
||||
ret
|
||||
|
||||
|
||||
.globl _pmix_atomic_add_32
|
||||
_pmix_atomic_add_32:
|
||||
pushl %ebp
|
||||
movl %esp, %ebp
|
||||
movl 8(%ebp), %eax
|
||||
movl 12(%ebp), %edx
|
||||
lock; addl %edx,(%eax)
|
||||
movl (%eax), %eax
|
||||
leave
|
||||
ret
|
||||
|
||||
|
||||
.globl _pmix_atomic_sub_32
|
||||
_pmix_atomic_sub_32:
|
||||
pushl %ebp
|
||||
movl %esp, %ebp
|
||||
movl 8(%ebp), %eax
|
||||
movl 12(%ebp), %edx
|
||||
lock; subl %edx,(%eax)
|
||||
movl (%eax), %eax
|
||||
leave
|
||||
ret
|
||||
|
||||
|
||||
.globl _pmix_sys_timer_get_cycles
|
||||
_pmix_sys_timer_get_cycles:
|
||||
pushl %ebp
|
||||
movl %esp, %ebp
|
||||
rdtsc
|
||||
popl %ebp
|
||||
ret
|
@ -1,108 +0,0 @@
|
||||
|
||||
.pred.safe_across_calls p1-p5,p16-p63
|
||||
.text
|
||||
.align 16
|
||||
.global pmix_atomic_mb#
|
||||
.proc pmix_atomic_mb#
|
||||
pmix_atomic_mb:
|
||||
.prologue
|
||||
.body
|
||||
mf
|
||||
br.ret.sptk.many b0
|
||||
;;
|
||||
.endp pmix_atomic_mb#
|
||||
.align 16
|
||||
.global pmix_atomic_rmb#
|
||||
.proc pmix_atomic_rmb#
|
||||
pmix_atomic_rmb:
|
||||
.prologue
|
||||
.body
|
||||
mf
|
||||
br.ret.sptk.many b0
|
||||
;;
|
||||
.endp pmix_atomic_rmb#
|
||||
.align 16
|
||||
.global pmix_atomic_wmb#
|
||||
.proc pmix_atomic_wmb#
|
||||
pmix_atomic_wmb:
|
||||
.prologue
|
||||
.body
|
||||
mf
|
||||
br.ret.sptk.many b0
|
||||
;;
|
||||
.endp pmix_atomic_wmb#
|
||||
.align 16
|
||||
.global pmix_atomic_cmpset_acq_32#
|
||||
.proc pmix_atomic_cmpset_acq_32#
|
||||
pmix_atomic_cmpset_acq_32:
|
||||
.prologue
|
||||
.body
|
||||
mov ar.ccv=r33;;
|
||||
cmpxchg4.acq r32=[r32],r34,ar.ccv
|
||||
;;
|
||||
cmp4.eq p6, p7 = r32, r33
|
||||
;;
|
||||
(p6) addl r8 = 1, r0
|
||||
(p7) mov r8 = r0
|
||||
br.ret.sptk.many b0
|
||||
;;
|
||||
.endp pmix_atomic_cmpset_acq_32#
|
||||
.align 16
|
||||
.global pmix_atomic_cmpset_rel_32#
|
||||
.proc pmix_atomic_cmpset_rel_32#
|
||||
pmix_atomic_cmpset_rel_32:
|
||||
.prologue
|
||||
.body
|
||||
mov ar.ccv=r33;;
|
||||
cmpxchg4.rel r32=[r32],r34,ar.ccv
|
||||
;;
|
||||
cmp4.eq p6, p7 = r32, r33
|
||||
;;
|
||||
(p6) addl r8 = 1, r0
|
||||
(p7) mov r8 = r0
|
||||
br.ret.sptk.many b0
|
||||
;;
|
||||
.endp pmix_atomic_cmpset_rel_32#
|
||||
.align 16
|
||||
.global pmix_atomic_cmpset_acq_64#
|
||||
.proc pmix_atomic_cmpset_acq_64#
|
||||
pmix_atomic_cmpset_acq_64:
|
||||
.prologue
|
||||
.body
|
||||
mov ar.ccv=r33;;
|
||||
cmpxchg8.acq r32=[r32],r34,ar.ccv
|
||||
;;
|
||||
cmp.eq p6, p7 = r33, r32
|
||||
;;
|
||||
(p6) addl r8 = 1, r0
|
||||
(p7) mov r8 = r0
|
||||
br.ret.sptk.many b0
|
||||
;;
|
||||
.endp pmix_atomic_cmpset_acq_64#
|
||||
.align 16
|
||||
.global pmix_atomic_cmpset_rel_64#
|
||||
.proc pmix_atomic_cmpset_rel_64#
|
||||
pmix_atomic_cmpset_rel_64:
|
||||
.prologue
|
||||
.body
|
||||
mov ar.ccv=r33;;
|
||||
cmpxchg8.rel r32=[r32],r34,ar.ccv
|
||||
;;
|
||||
cmp.eq p6, p7 = r33, r32
|
||||
;;
|
||||
(p6) addl r8 = 1, r0
|
||||
(p7) mov r8 = r0
|
||||
br.ret.sptk.many b0
|
||||
;;
|
||||
.endp pmix_atomic_cmpset_rel_64#
|
||||
.align 16
|
||||
.global pmix_sys_timer_get_cycles#
|
||||
.proc pmix_sys_timer_get_cycles#
|
||||
pmix_sys_timer_get_cycles:
|
||||
.prologue
|
||||
.body
|
||||
mov r8=ar.itc
|
||||
br.ret.sptk.many b0
|
||||
;;
|
||||
.endp pmix_sys_timer_get_cycles#
|
||||
.ident "GCC: (GNU) 3.2.3 20030502 (Red Hat Linux 3.2.3-49)"
|
@ -1,110 +0,0 @@
|
||||
|
||||
.pred.safe_across_calls p1-p5,p16-p63
|
||||
.text
|
||||
.align 16
|
||||
.global pmix_atomic_mb#
|
||||
.proc pmix_atomic_mb#
|
||||
pmix_atomic_mb:
|
||||
.prologue
|
||||
.body
|
||||
mf
|
||||
br.ret.sptk.many b0
|
||||
;;
|
||||
.endp pmix_atomic_mb#
|
||||
.align 16
|
||||
.global pmix_atomic_rmb#
|
||||
.proc pmix_atomic_rmb#
|
||||
pmix_atomic_rmb:
|
||||
.prologue
|
||||
.body
|
||||
mf
|
||||
br.ret.sptk.many b0
|
||||
;;
|
||||
.endp pmix_atomic_rmb#
|
||||
.align 16
|
||||
.global pmix_atomic_wmb#
|
||||
.proc pmix_atomic_wmb#
|
||||
pmix_atomic_wmb:
|
||||
.prologue
|
||||
.body
|
||||
mf
|
||||
br.ret.sptk.many b0
|
||||
;;
|
||||
.endp pmix_atomic_wmb#
|
||||
.align 16
|
||||
.global pmix_atomic_cmpset_acq_32#
|
||||
.proc pmix_atomic_cmpset_acq_32#
|
||||
pmix_atomic_cmpset_acq_32:
|
||||
.prologue
|
||||
.body
|
||||
mov ar.ccv=r33;;
|
||||
cmpxchg4.acq r32=[r32],r34,ar.ccv
|
||||
;;
|
||||
cmp4.eq p6, p7 = r32, r33
|
||||
;;
|
||||
(p6) addl r8 = 1, r0
|
||||
(p7) mov r8 = r0
|
||||
br.ret.sptk.many b0
|
||||
;;
|
||||
.endp pmix_atomic_cmpset_acq_32#
|
||||
.align 16
|
||||
.global pmix_atomic_cmpset_rel_32#
|
||||
.proc pmix_atomic_cmpset_rel_32#
|
||||
pmix_atomic_cmpset_rel_32:
|
||||
.prologue
|
||||
.body
|
||||
mov ar.ccv=r33;;
|
||||
cmpxchg4.rel r32=[r32],r34,ar.ccv
|
||||
;;
|
||||
cmp4.eq p6, p7 = r32, r33
|
||||
;;
|
||||
(p6) addl r8 = 1, r0
|
||||
(p7) mov r8 = r0
|
||||
br.ret.sptk.many b0
|
||||
;;
|
||||
.endp pmix_atomic_cmpset_rel_32#
|
||||
.align 16
|
||||
.global pmix_atomic_cmpset_acq_64#
|
||||
.proc pmix_atomic_cmpset_acq_64#
|
||||
pmix_atomic_cmpset_acq_64:
|
||||
.prologue
|
||||
.body
|
||||
mov ar.ccv=r33;;
|
||||
cmpxchg8.acq r32=[r32],r34,ar.ccv
|
||||
;;
|
||||
cmp.eq p6, p7 = r33, r32
|
||||
;;
|
||||
(p6) addl r8 = 1, r0
|
||||
(p7) mov r8 = r0
|
||||
br.ret.sptk.many b0
|
||||
;;
|
||||
.endp pmix_atomic_cmpset_acq_64#
|
||||
.align 16
|
||||
.global pmix_atomic_cmpset_rel_64#
|
||||
.proc pmix_atomic_cmpset_rel_64#
|
||||
pmix_atomic_cmpset_rel_64:
|
||||
.prologue
|
||||
.body
|
||||
mov ar.ccv=r33;;
|
||||
cmpxchg8.rel r32=[r32],r34,ar.ccv
|
||||
;;
|
||||
cmp.eq p6, p7 = r33, r32
|
||||
;;
|
||||
(p6) addl r8 = 1, r0
|
||||
(p7) mov r8 = r0
|
||||
br.ret.sptk.many b0
|
||||
;;
|
||||
.endp pmix_atomic_cmpset_rel_64#
|
||||
.align 16
|
||||
.global pmix_sys_timer_get_cycles#
|
||||
.proc pmix_sys_timer_get_cycles#
|
||||
pmix_sys_timer_get_cycles:
|
||||
.prologue
|
||||
.body
|
||||
mov r8=ar.itc
|
||||
br.ret.sptk.many b0
|
||||
;;
|
||||
.endp pmix_sys_timer_get_cycles#
|
||||
.ident "GCC: (GNU) 3.2.3 20030502 (Red Hat Linux 3.2.3-49)"
|
||||
|
||||
.section .note.GNU-stack,"",@progbits
|
@ -1,195 +0,0 @@
|
||||
|
||||
#ifdef __linux__
|
||||
#include <sys/asm.h>
|
||||
#else
|
||||
#include <asm.h>
|
||||
#endif
|
||||
#include <regdef.h>
|
||||
|
||||
.text
|
||||
|
||||
.align 3
|
||||
LEAF(pmix_atomic_mb)
|
||||
#ifdef __linux__
|
||||
.set mips2
|
||||
#endif
|
||||
sync
|
||||
#ifdef __linux__
|
||||
.set mips0
|
||||
#endif
|
||||
j ra
|
||||
END(pmix_atomic_mb)
|
||||
|
||||
|
||||
.align 3
|
||||
LEAF(pmix_atomic_rmb)
|
||||
#ifdef __linux__
|
||||
.set mips2
|
||||
#endif
|
||||
sync
|
||||
#ifdef __linux__
|
||||
.set mips0
|
||||
#endif
|
||||
j ra
|
||||
END(pmix_atomic_rmb)
|
||||
|
||||
|
||||
LEAF(pmix_atomic_wmb)
|
||||
#ifdef __linux__
|
||||
.set mips2
|
||||
#endif
|
||||
sync
|
||||
#ifdef __linux__
|
||||
.set mips0
|
||||
#endif
|
||||
j ra
|
||||
END(pmix_atomic_wmb)
|
||||
|
||||
|
||||
LEAF(pmix_atomic_cmpset_32)
|
||||
.set noreorder
|
||||
retry1:
|
||||
#ifdef __linux__
|
||||
.set mips2
|
||||
#endif
|
||||
ll $3, 0($4)
|
||||
#ifdef __linux__
|
||||
.set mips0
|
||||
#endif
|
||||
bne $3, $5, done1
|
||||
or $2, $6, 0
|
||||
#ifdef __linux__
|
||||
.set mips2
|
||||
#endif
|
||||
sc $2, 0($4)
|
||||
#ifdef __linux__
|
||||
.set mips0
|
||||
#endif
|
||||
beqz $2, retry1
|
||||
done1:
|
||||
xor $3,$3,$5
|
||||
j ra
|
||||
sltu $2,$3,1
|
||||
.set reorder
|
||||
END(pmix_atomic_cmpset_32)
|
||||
|
||||
|
||||
LEAF(pmix_atomic_cmpset_acq_32)
|
||||
.set noreorder
|
||||
retry2:
|
||||
#ifdef __linux__
|
||||
.set mips2
|
||||
#endif
|
||||
ll $3, 0($4)
|
||||
#ifdef __linux__
|
||||
.set mips0
|
||||
#endif
|
||||
bne $3, $5, done2
|
||||
or $2, $6, 0
|
||||
#ifdef __linux__
|
||||
.set mips2
|
||||
#endif
|
||||
sc $2, 0($4)
|
||||
#ifdef __linux__
|
||||
.set mips0
|
||||
#endif
|
||||
beqz $2, retry2
|
||||
done2:
|
||||
#ifdef __linux__
|
||||
.set mips2
|
||||
#endif
|
||||
sync
|
||||
#ifdef __linux__
|
||||
.set mips0
|
||||
#endif
|
||||
xor $3,$3,$5
|
||||
j ra
|
||||
sltu $2,$3,1
|
||||
.set reorder
|
||||
END(pmix_atomic_cmpset_acq_32)
|
||||
|
||||
|
||||
LEAF(pmix_atomic_cmpset_rel_32)
|
||||
.set noreorder
|
||||
#ifdef __linux__
|
||||
.set mips2
|
||||
#endif
|
||||
sync
|
||||
#ifdef __linux__
|
||||
.set mips0
|
||||
#endif
|
||||
retry3:
|
||||
#ifdef __linux__
|
||||
.set mips2
|
||||
#endif
|
||||
ll $3, 0($4)
|
||||
#ifdef __linux__
|
||||
.set mips0
|
||||
#endif
|
||||
bne $3, $5, done3
|
||||
or $2, $6, 0
|
||||
#ifdef __linux__
|
||||
.set mips2
|
||||
#endif
|
||||
sc $2, 0($4)
|
||||
#ifdef __linux__
|
||||
.set mips0
|
||||
#endif
|
||||
beqz $2, retry3
|
||||
done3:
|
||||
xor $3,$3,$5
|
||||
j ra
|
||||
sltu $2,$3,1
|
||||
.set reorder
|
||||
END(pmix_atomic_cmpset_rel_32)
|
||||
|
||||
#ifdef __mips64
|
||||
LEAF(pmix_atomic_cmpset_64)
|
||||
.set noreorder
|
||||
retry4:
|
||||
lld $3, 0($4)
|
||||
bne $3, $5, done4
|
||||
or $2, $6, 0
|
||||
scd $2, 0($4)
|
||||
beqz $2, retry4
|
||||
done4:
|
||||
xor $3,$3,$5
|
||||
j ra
|
||||
sltu $2,$3,1
|
||||
.set reorder
|
||||
END(pmix_atomic_cmpset_64)
|
||||
|
||||
|
||||
LEAF(pmix_atomic_cmpset_acq_64)
|
||||
.set noreorder
|
||||
retry5:
|
||||
lld $3, 0($4)
|
||||
bne $3, $5, done5
|
||||
or $2, $6, 0
|
||||
scd $2, 0($4)
|
||||
beqz $2, retry5
|
||||
done5:
|
||||
sync
|
||||
xor $3,$3,$5
|
||||
j ra
|
||||
sltu $2,$3,1
|
||||
.set reorder
|
||||
END(pmix_atomic_cmpset_acq_64)
|
||||
|
||||
|
||||
LEAF(pmix_atomic_cmpset_rel_64)
|
||||
.set noreorder
|
||||
sync
|
||||
retry6:
|
||||
lld $3, 0($4)
|
||||
bne $3, $5, done6
|
||||
or $2, $6, 0
|
||||
scd $2, 0($4)
|
||||
beqz $2, retry6
|
||||
done6:
|
||||
xor $3,$3,$5
|
||||
j ra
|
||||
sltu $2,$3,1
|
||||
.set reorder
|
||||
END(pmix_atomic_cmpset_rel_64)
|
||||
#endif /* __mips64 */
|
@ -1,197 +0,0 @@
|
||||
|
||||
#ifdef __linux__
|
||||
#include <sys/asm.h>
|
||||
#else
|
||||
#include <asm.h>
|
||||
#endif
|
||||
#include <regdef.h>
|
||||
|
||||
.text
|
||||
|
||||
.align 3
|
||||
LEAF(pmix_atomic_mb)
|
||||
#ifdef __linux__
|
||||
.set mips2
|
||||
#endif
|
||||
sync
|
||||
#ifdef __linux__
|
||||
.set mips0
|
||||
#endif
|
||||
j ra
|
||||
END(pmix_atomic_mb)
|
||||
|
||||
|
||||
.align 3
|
||||
LEAF(pmix_atomic_rmb)
|
||||
#ifdef __linux__
|
||||
.set mips2
|
||||
#endif
|
||||
sync
|
||||
#ifdef __linux__
|
||||
.set mips0
|
||||
#endif
|
||||
j ra
|
||||
END(pmix_atomic_rmb)
|
||||
|
||||
|
||||
LEAF(pmix_atomic_wmb)
|
||||
#ifdef __linux__
|
||||
.set mips2
|
||||
#endif
|
||||
sync
|
||||
#ifdef __linux__
|
||||
.set mips0
|
||||
#endif
|
||||
j ra
|
||||
END(pmix_atomic_wmb)
|
||||
|
||||
|
||||
LEAF(pmix_atomic_cmpset_32)
|
||||
.set noreorder
|
||||
retry1:
|
||||
#ifdef __linux__
|
||||
.set mips2
|
||||
#endif
|
||||
ll $3, 0($4)
|
||||
#ifdef __linux__
|
||||
.set mips0
|
||||
#endif
|
||||
bne $3, $5, done1
|
||||
or $2, $6, 0
|
||||
#ifdef __linux__
|
||||
.set mips2
|
||||
#endif
|
||||
sc $2, 0($4)
|
||||
#ifdef __linux__
|
||||
.set mips0
|
||||
#endif
|
||||
beqz $2, retry1
|
||||
done1:
|
||||
xor $3,$3,$5
|
||||
j ra
|
||||
sltu $2,$3,1
|
||||
.set reorder
|
||||
END(pmix_atomic_cmpset_32)
|
||||
|
||||
|
||||
LEAF(pmix_atomic_cmpset_acq_32)
|
||||
.set noreorder
|
||||
retry2:
|
||||
#ifdef __linux__
|
||||
.set mips2
|
||||
#endif
|
||||
ll $3, 0($4)
|
||||
#ifdef __linux__
|
||||
.set mips0
|
||||
#endif
|
||||
bne $3, $5, done2
|
||||
or $2, $6, 0
|
||||
#ifdef __linux__
|
||||
.set mips2
|
||||
#endif
|
||||
sc $2, 0($4)
|
||||
#ifdef __linux__
|
||||
.set mips0
|
||||
#endif
|
||||
beqz $2, retry2
|
||||
done2:
|
||||
#ifdef __linux__
|
||||
.set mips2
|
||||
#endif
|
||||
sync
|
||||
#ifdef __linux__
|
||||
.set mips0
|
||||
#endif
|
||||
xor $3,$3,$5
|
||||
j ra
|
||||
sltu $2,$3,1
|
||||
.set reorder
|
||||
END(pmix_atomic_cmpset_acq_32)
|
||||
|
||||
|
||||
LEAF(pmix_atomic_cmpset_rel_32)
|
||||
.set noreorder
|
||||
#ifdef __linux__
|
||||
.set mips2
|
||||
#endif
|
||||
sync
|
||||
#ifdef __linux__
|
||||
.set mips0
|
||||
#endif
|
||||
retry3:
|
||||
#ifdef __linux__
|
||||
.set mips2
|
||||
#endif
|
||||
ll $3, 0($4)
|
||||
#ifdef __linux__
|
||||
.set mips0
|
||||
#endif
|
||||
bne $3, $5, done3
|
||||
or $2, $6, 0
|
||||
#ifdef __linux__
|
||||
.set mips2
|
||||
#endif
|
||||
sc $2, 0($4)
|
||||
#ifdef __linux__
|
||||
.set mips0
|
||||
#endif
|
||||
beqz $2, retry3
|
||||
done3:
|
||||
xor $3,$3,$5
|
||||
j ra
|
||||
sltu $2,$3,1
|
||||
.set reorder
|
||||
END(pmix_atomic_cmpset_rel_32)
|
||||
|
||||
#ifdef __mips64
|
||||
LEAF(pmix_atomic_cmpset_64)
|
||||
.set noreorder
|
||||
retry4:
|
||||
lld $3, 0($4)
|
||||
bne $3, $5, done4
|
||||
or $2, $6, 0
|
||||
scd $2, 0($4)
|
||||
beqz $2, retry4
|
||||
done4:
|
||||
xor $3,$3,$5
|
||||
j ra
|
||||
sltu $2,$3,1
|
||||
.set reorder
|
||||
END(pmix_atomic_cmpset_64)
|
||||
|
||||
|
||||
LEAF(pmix_atomic_cmpset_acq_64)
|
||||
.set noreorder
|
||||
retry5:
|
||||
lld $3, 0($4)
|
||||
bne $3, $5, done5
|
||||
or $2, $6, 0
|
||||
scd $2, 0($4)
|
||||
beqz $2, retry5
|
||||
done5:
|
||||
sync
|
||||
xor $3,$3,$5
|
||||
j ra
|
||||
sltu $2,$3,1
|
||||
.set reorder
|
||||
END(pmix_atomic_cmpset_acq_64)
|
||||
|
||||
|
||||
LEAF(pmix_atomic_cmpset_rel_64)
|
||||
.set noreorder
|
||||
sync
|
||||
retry6:
|
||||
lld $3, 0($4)
|
||||
bne $3, $5, done6
|
||||
or $2, $6, 0
|
||||
scd $2, 0($4)
|
||||
beqz $2, retry6
|
||||
done6:
|
||||
xor $3,$3,$5
|
||||
j ra
|
||||
sltu $2,$3,1
|
||||
.set reorder
|
||||
END(pmix_atomic_cmpset_rel_64)
|
||||
#endif /* __mips64 */
|
||||
|
||||
.section .note.GNU-stack,"",@progbits
|
@ -1,197 +0,0 @@
|
||||
|
||||
#ifdef __linux__
|
||||
#include <sys/asm.h>
|
||||
#else
|
||||
#include <asm.h>
|
||||
#endif
|
||||
#include <regdef.h>
|
||||
|
||||
.text
|
||||
|
||||
.align 3
|
||||
LEAF(pmix_atomic_mb)
|
||||
#ifdef __linux__
|
||||
.set mips2
|
||||
#endif
|
||||
sync
|
||||
#ifdef __linux__
|
||||
.set mips0
|
||||
#endif
|
||||
j ra
|
||||
END(pmix_atomic_mb)
|
||||
|
||||
|
||||
.align 3
|
||||
LEAF(pmix_atomic_rmb)
|
||||
#ifdef __linux__
|
||||
.set mips2
|
||||
#endif
|
||||
sync
|
||||
#ifdef __linux__
|
||||
.set mips0
|
||||
#endif
|
||||
j ra
|
||||
END(pmix_atomic_rmb)
|
||||
|
||||
|
||||
LEAF(pmix_atomic_wmb)
|
||||
#ifdef __linux__
|
||||
.set mips2
|
||||
#endif
|
||||
sync
|
||||
#ifdef __linux__
|
||||
.set mips0
|
||||
#endif
|
||||
j ra
|
||||
END(pmix_atomic_wmb)
|
||||
|
||||
|
||||
LEAF(pmix_atomic_cmpset_32)
|
||||
.set noreorder
|
||||
retry1:
|
||||
#ifdef __linux__
|
||||
.set mips2
|
||||
#endif
|
||||
ll $3, 0($4)
|
||||
#ifdef __linux__
|
||||
.set mips0
|
||||
#endif
|
||||
bne $3, $5, done1
|
||||
or $2, $6, 0
|
||||
#ifdef __linux__
|
||||
.set mips2
|
||||
#endif
|
||||
sc $2, 0($4)
|
||||
#ifdef __linux__
|
||||
.set mips0
|
||||
#endif
|
||||
beqz $2, retry1
|
||||
done1:
|
||||
xor $3,$3,$5
|
||||
j ra
|
||||
sltu $2,$3,1
|
||||
.set reorder
|
||||
END(pmix_atomic_cmpset_32)
|
||||
|
||||
|
||||
LEAF(pmix_atomic_cmpset_acq_32)
|
||||
.set noreorder
|
||||
retry2:
|
||||
#ifdef __linux__
|
||||
.set mips2
|
||||
#endif
|
||||
ll $3, 0($4)
|
||||
#ifdef __linux__
|
||||
.set mips0
|
||||
#endif
|
||||
bne $3, $5, done2
|
||||
or $2, $6, 0
|
||||
#ifdef __linux__
|
||||
.set mips2
|
||||
#endif
|
||||
sc $2, 0($4)
|
||||
#ifdef __linux__
|
||||
.set mips0
|
||||
#endif
|
||||
beqz $2, retry2
|
||||
done2:
|
||||
#ifdef __linux__
|
||||
.set mips2
|
||||
#endif
|
||||
sync
|
||||
#ifdef __linux__
|
||||
.set mips0
|
||||
#endif
|
||||
xor $3,$3,$5
|
||||
j ra
|
||||
sltu $2,$3,1
|
||||
.set reorder
|
||||
END(pmix_atomic_cmpset_acq_32)
|
||||
|
||||
|
||||
LEAF(pmix_atomic_cmpset_rel_32)
|
||||
.set noreorder
|
||||
#ifdef __linux__
|
||||
.set mips2
|
||||
#endif
|
||||
sync
|
||||
#ifdef __linux__
|
||||
.set mips0
|
||||
#endif
|
||||
retry3:
|
||||
#ifdef __linux__
|
||||
.set mips2
|
||||
#endif
|
||||
ll $3, 0($4)
|
||||
#ifdef __linux__
|
||||
.set mips0
|
||||
#endif
|
||||
bne $3, $5, done3
|
||||
or $2, $6, 0
|
||||
#ifdef __linux__
|
||||
.set mips2
|
||||
#endif
|
||||
sc $2, 0($4)
|
||||
#ifdef __linux__
|
||||
.set mips0
|
||||
#endif
|
||||
beqz $2, retry3
|
||||
done3:
|
||||
xor $3,$3,$5
|
||||
j ra
|
||||
sltu $2,$3,1
|
||||
.set reorder
|
||||
END(pmix_atomic_cmpset_rel_32)
|
||||
|
||||
#ifdef __mips64
|
||||
LEAF(pmix_atomic_cmpset_64)
|
||||
.set noreorder
|
||||
retry4:
|
||||
lld $3, 0($4)
|
||||
bne $3, $5, done4
|
||||
or $2, $6, 0
|
||||
scd $2, 0($4)
|
||||
beqz $2, retry4
|
||||
done4:
|
||||
xor $3,$3,$5
|
||||
j ra
|
||||
sltu $2,$3,1
|
||||
.set reorder
|
||||
END(pmix_atomic_cmpset_64)
|
||||
|
||||
|
||||
LEAF(pmix_atomic_cmpset_acq_64)
|
||||
.set noreorder
|
||||
retry5:
|
||||
lld $3, 0($4)
|
||||
bne $3, $5, done5
|
||||
or $2, $6, 0
|
||||
scd $2, 0($4)
|
||||
beqz $2, retry5
|
||||
done5:
|
||||
sync
|
||||
xor $3,$3,$5
|
||||
j ra
|
||||
sltu $2,$3,1
|
||||
.set reorder
|
||||
END(pmix_atomic_cmpset_acq_64)
|
||||
|
||||
|
||||
LEAF(pmix_atomic_cmpset_rel_64)
|
||||
.set noreorder
|
||||
sync
|
||||
retry6:
|
||||
lld $3, 0($4)
|
||||
bne $3, $5, done6
|
||||
or $2, $6, 0
|
||||
scd $2, 0($4)
|
||||
beqz $2, retry6
|
||||
done6:
|
||||
xor $3,$3,$5
|
||||
j ra
|
||||
sltu $2,$3,1
|
||||
.set reorder
|
||||
END(pmix_atomic_cmpset_rel_64)
|
||||
#endif /* __mips64 */
|
||||
|
||||
.section .note.GNU-stack,"",@progbits
|
@ -1,195 +0,0 @@
|
||||
|
||||
#ifdef __linux__
|
||||
#include <sys/asm.h>
|
||||
#else
|
||||
#include <asm.h>
|
||||
#endif
|
||||
#include <regdef.h>
|
||||
|
||||
.text
|
||||
|
||||
.align 3
|
||||
LEAF(pmix_atomic_mb)
|
||||
#ifdef __linux__
|
||||
.set mips2
|
||||
#endif
|
||||
sync
|
||||
#ifdef __linux__
|
||||
.set mips0
|
||||
#endif
|
||||
j ra
|
||||
END(pmix_atomic_mb)
|
||||
|
||||
|
||||
.align 3
|
||||
LEAF(pmix_atomic_rmb)
|
||||
#ifdef __linux__
|
||||
.set mips2
|
||||
#endif
|
||||
sync
|
||||
#ifdef __linux__
|
||||
.set mips0
|
||||
#endif
|
||||
j ra
|
||||
END(pmix_atomic_rmb)
|
||||
|
||||
|
||||
LEAF(pmix_atomic_wmb)
|
||||
#ifdef __linux__
|
||||
.set mips2
|
||||
#endif
|
||||
sync
|
||||
#ifdef __linux__
|
||||
.set mips0
|
||||
#endif
|
||||
j ra
|
||||
END(pmix_atomic_wmb)
|
||||
|
||||
|
||||
LEAF(pmix_atomic_cmpset_32)
|
||||
.set noreorder
|
||||
retry1:
|
||||
#ifdef __linux__
|
||||
.set mips2
|
||||
#endif
|
||||
ll $3, 0($4)
|
||||
#ifdef __linux__
|
||||
.set mips0
|
||||
#endif
|
||||
bne $3, $5, done1
|
||||
or $2, $6, 0
|
||||
#ifdef __linux__
|
||||
.set mips2
|
||||
#endif
|
||||
sc $2, 0($4)
|
||||
#ifdef __linux__
|
||||
.set mips0
|
||||
#endif
|
||||
beqz $2, retry1
|
||||
done1:
|
||||
xor $3,$3,$5
|
||||
j ra
|
||||
sltu $2,$3,1
|
||||
.set reorder
|
||||
END(pmix_atomic_cmpset_32)
|
||||
|
||||
|
||||
LEAF(pmix_atomic_cmpset_acq_32)
|
||||
.set noreorder
|
||||
retry2:
|
||||
#ifdef __linux__
|
||||
.set mips2
|
||||
#endif
|
||||
ll $3, 0($4)
|
||||
#ifdef __linux__
|
||||
.set mips0
|
||||
#endif
|
||||
bne $3, $5, done2
|
||||
or $2, $6, 0
|
||||
#ifdef __linux__
|
||||
.set mips2
|
||||
#endif
|
||||
sc $2, 0($4)
|
||||
#ifdef __linux__
|
||||
.set mips0
|
||||
#endif
|
||||
beqz $2, retry2
|
||||
done2:
|
||||
#ifdef __linux__
|
||||
.set mips2
|
||||
#endif
|
||||
sync
|
||||
#ifdef __linux__
|
||||
.set mips0
|
||||
#endif
|
||||
xor $3,$3,$5
|
||||
j ra
|
||||
sltu $2,$3,1
|
||||
.set reorder
|
||||
END(pmix_atomic_cmpset_acq_32)
|
||||
|
||||
|
||||
LEAF(pmix_atomic_cmpset_rel_32)
|
||||
.set noreorder
|
||||
#ifdef __linux__
|
||||
.set mips2
|
||||
#endif
|
||||
sync
|
||||
#ifdef __linux__
|
||||
.set mips0
|
||||
#endif
|
||||
retry3:
|
||||
#ifdef __linux__
|
||||
.set mips2
|
||||
#endif
|
||||
ll $3, 0($4)
|
||||
#ifdef __linux__
|
||||
.set mips0
|
||||
#endif
|
||||
bne $3, $5, done3
|
||||
or $2, $6, 0
|
||||
#ifdef __linux__
|
||||
.set mips2
|
||||
#endif
|
||||
sc $2, 0($4)
|
||||
#ifdef __linux__
|
||||
.set mips0
|
||||
#endif
|
||||
beqz $2, retry3
|
||||
done3:
|
||||
xor $3,$3,$5
|
||||
j ra
|
||||
sltu $2,$3,1
|
||||
.set reorder
|
||||
END(pmix_atomic_cmpset_rel_32)
|
||||
|
||||
#ifdef __mips64
|
||||
LEAF(pmix_atomic_cmpset_64)
|
||||
.set noreorder
|
||||
retry4:
|
||||
lld $3, 0($4)
|
||||
bne $3, $5, done4
|
||||
or $2, $6, 0
|
||||
scd $2, 0($4)
|
||||
beqz $2, retry4
|
||||
done4:
|
||||
xor $3,$3,$5
|
||||
j ra
|
||||
sltu $2,$3,1
|
||||
.set reorder
|
||||
END(pmix_atomic_cmpset_64)
|
||||
|
||||
|
||||
LEAF(pmix_atomic_cmpset_acq_64)
|
||||
.set noreorder
|
||||
retry5:
|
||||
lld $3, 0($4)
|
||||
bne $3, $5, done5
|
||||
or $2, $6, 0
|
||||
scd $2, 0($4)
|
||||
beqz $2, retry5
|
||||
done5:
|
||||
sync
|
||||
xor $3,$3,$5
|
||||
j ra
|
||||
sltu $2,$3,1
|
||||
.set reorder
|
||||
END(pmix_atomic_cmpset_acq_64)
|
||||
|
||||
|
||||
LEAF(pmix_atomic_cmpset_rel_64)
|
||||
.set noreorder
|
||||
sync
|
||||
retry6:
|
||||
lld $3, 0($4)
|
||||
bne $3, $5, done6
|
||||
or $2, $6, 0
|
||||
scd $2, 0($4)
|
||||
beqz $2, retry6
|
||||
done6:
|
||||
xor $3,$3,$5
|
||||
j ra
|
||||
sltu $2,$3,1
|
||||
.set reorder
|
||||
END(pmix_atomic_cmpset_rel_64)
|
||||
#endif /* __mips64 */
|
@ -1,165 +0,0 @@
|
||||
.text
|
||||
|
||||
.align 2
|
||||
.globl _pmix_atomic_mb
|
||||
_pmix_atomic_mb:
|
||||
sync
|
||||
blr
|
||||
|
||||
|
||||
.globl _pmix_atomic_rmb
|
||||
_pmix_atomic_rmb:
|
||||
lwsync
|
||||
blr
|
||||
|
||||
|
||||
.globl _pmix_atomic_wmb
|
||||
_pmix_atomic_wmb:
|
||||
eieio
|
||||
blr
|
||||
|
||||
|
||||
.globl _pmix_atomic_cmpset_32
|
||||
_pmix_atomic_cmpset_32:
|
||||
L1: lwarx r0, 0, r3
|
||||
cmpw 0, r0, r4
|
||||
bne- L2
|
||||
stwcx. r5, 0, r3
|
||||
bne- L1
|
||||
L2:
|
||||
xor r3,r0,r4
|
||||
subfic r5,r3,0
|
||||
adde r3,r5,r3
|
||||
blr
|
||||
|
||||
|
||||
.globl _pmix_atomic_cmpset_acq_32
|
||||
_pmix_atomic_cmpset_acq_32:
|
||||
L3: lwarx r0, 0, r3
|
||||
cmpw 0, r0, r4
|
||||
bne- L4
|
||||
stwcx. r5, 0, r3
|
||||
bne- L3
|
||||
sync
|
||||
L4:
|
||||
xor r3,r0,r4
|
||||
subfic r5,r3,0
|
||||
adde r3,r5,r3
|
||||
lwsync
|
||||
blr
|
||||
|
||||
|
||||
.globl _pmix_atomic_cmpset_rel_32
|
||||
_pmix_atomic_cmpset_rel_32:
|
||||
eieio
|
||||
L5: lwarx r0, 0, r3
|
||||
cmpw 0, r0, r4
|
||||
bne- L6
|
||||
stwcx. r5, 0, r3
|
||||
bne- L5
|
||||
sync
|
||||
L6:
|
||||
xor r3,r0,r4
|
||||
subfic r5,r3,0
|
||||
adde r3,r5,r3
|
||||
blr
|
||||
|
||||
.globl _pmix_atomic_cmpset_64
|
||||
_pmix_atomic_cmpset_64:
|
||||
stw r4,-32(r1)
|
||||
stw r5,-28(r1)
|
||||
stw r6,-24(r1)
|
||||
stw r7,-20(r1)
|
||||
ld r5,-32(r1)
|
||||
ld r7,-24(r1)
|
||||
L7: ldarx r9, 0, r3
|
||||
cmpd 0, r9, r5
|
||||
bne- L8
|
||||
stdcx. r7, 0, r3
|
||||
bne- L7
|
||||
L8:
|
||||
xor r3,r5,r9
|
||||
subfic r5,r3,0
|
||||
adde r3,r5,r3
|
||||
blr
|
||||
|
||||
|
||||
.globl _pmix_atomic_cmpset_acq_64
|
||||
_pmix_atomic_cmpset_acq_64:
|
||||
stw r4,-32(r1)
|
||||
stw r5,-28(r1)
|
||||
stw r6,-24(r1)
|
||||
stw r7,-20(r1)
|
||||
ld r5,-32(r1)
|
||||
ld r7,-24(r1)
|
||||
|
||||
L9: ldarx r9, 0, r3
|
||||
cmpd 0, r9, r5
|
||||
bne- L10
|
||||
stdcx. r7, 0, r3
|
||||
bne- L9
|
||||
L10:
|
||||
xor r3,r5,r9
|
||||
subfic r5,r3,0
|
||||
adde r3,r5,r3
|
||||
blr
|
||||
lwsync
|
||||
blr
|
||||
|
||||
|
||||
.globl _pmix_atomic_cmpset_rel_64
|
||||
_pmix_atomic_cmpset_rel_64:
|
||||
stw r4,-32(r1)
|
||||
stw r5,-28(r1)
|
||||
stw r6,-24(r1)
|
||||
stw r7,-20(r1)
|
||||
ld r5,-32(r1)
|
||||
ld r7,-24(r1)
|
||||
|
||||
eieio
|
||||
L11: ldarx r9, 0, r3
|
||||
cmpd 0, r9, r5
|
||||
bne- L12
|
||||
stdcx. r7, 0, r3
|
||||
bne- L11
|
||||
L12:
|
||||
xor r3,r5,r9
|
||||
subfic r5,r3,0
|
||||
adde r3,r5,r3
|
||||
blr
|
||||
lwsync
|
||||
blr
|
||||
|
||||
|
||||
.globl _pmix_atomic_add_32
|
||||
_pmix_atomic_add_32:
|
||||
L13: lwarx r0, 0, r3
|
||||
add r0, r4, r0
|
||||
stwcx. r0, 0, r3
|
||||
bne- L13
|
||||
mr r3,r0
|
||||
blr
|
||||
|
||||
|
||||
.globl _pmix_atomic_sub_32
|
||||
_pmix_atomic_sub_32:
|
||||
L14: lwarx r0,0,r3
|
||||
subf r0,r4,r0
|
||||
stwcx. r0,0,r3
|
||||
bne- L14
|
||||
mr r3,r0
|
||||
blr
|
||||
|
||||
.globl _pmix_sys_timer_get_cycles
|
||||
_pmix_sys_timer_get_cycles:
|
||||
L15:
|
||||
mftbu r0
|
||||
mftb r11
|
||||
mftbu r2
|
||||
cmpw cr7,r2,r0
|
||||
bne+ cr7,L15
|
||||
li r4,0
|
||||
li r9,0
|
||||
or r3,r2,r9
|
||||
or r4,r4,r11
|
||||
blr
|
@ -1,156 +0,0 @@
|
||||
.machine "ppc"
|
||||
.toc
|
||||
.csect .text[PR]
|
||||
|
||||
.align 2
|
||||
.globl pmix_atomic_mb
|
||||
.globl .pmix_atomic_mb
|
||||
.csect [DS],3
|
||||
pmix_atomic_mb:
|
||||
.long .pmix_atomic_mb, TOC[tc0], 0
|
||||
.csect [PR]
|
||||
.align 2
|
||||
.pmix_atomic_mb:
|
||||
sync
|
||||
blr
|
||||
|
||||
|
||||
.globl pmix_atomic_rmb
|
||||
.globl .pmix_atomic_rmb
|
||||
.csect [DS],3
|
||||
pmix_atomic_rmb:
|
||||
.long .pmix_atomic_rmb, TOC[tc0], 0
|
||||
.csect [PR]
|
||||
.align 2
|
||||
.pmix_atomic_rmb:
|
||||
lwsync
|
||||
blr
|
||||
|
||||
|
||||
.globl pmix_atomic_wmb
|
||||
.globl .pmix_atomic_wmb
|
||||
.csect [DS],3
|
||||
pmix_atomic_wmb:
|
||||
.long .pmix_atomic_wmb, TOC[tc0], 0
|
||||
.csect [PR]
|
||||
.align 2
|
||||
.pmix_atomic_wmb:
|
||||
eieio
|
||||
blr
|
||||
|
||||
|
||||
.globl pmix_atomic_cmpset_32
|
||||
.globl .pmix_atomic_cmpset_32
|
||||
.csect [DS],3
|
||||
pmix_atomic_cmpset_32:
|
||||
.long .pmix_atomic_cmpset_32, TOC[tc0], 0
|
||||
.csect [PR]
|
||||
.align 2
|
||||
.pmix_atomic_cmpset_32:
|
||||
L1: lwarx 0, 0, 3
|
||||
cmpw 0, 0, 4
|
||||
bne- L2
|
||||
stwcx. 5, 0, 3
|
||||
bne- L1
|
||||
L2:
|
||||
xor 3,0,4
|
||||
subfic 5,3,0
|
||||
adde 3,5,3
|
||||
blr
|
||||
|
||||
|
||||
.globl pmix_atomic_cmpset_acq_32
|
||||
.globl .pmix_atomic_cmpset_acq_32
|
||||
.csect [DS],3
|
||||
pmix_atomic_cmpset_acq_32:
|
||||
.long .pmix_atomic_cmpset_acq_32, TOC[tc0], 0
|
||||
.csect [PR]
|
||||
.align 2
|
||||
.pmix_atomic_cmpset_acq_32:
|
||||
L3: lwarx 0, 0, 3
|
||||
cmpw 0, 0, 4
|
||||
bne- L4
|
||||
stwcx. 5, 0, 3
|
||||
bne- L3
|
||||
sync
|
||||
L4:
|
||||
xor 3,0,4
|
||||
subfic 5,3,0
|
||||
adde 3,5,3
|
||||
lwsync
|
||||
blr
|
||||
|
||||
|
||||
.globl pmix_atomic_cmpset_rel_32
|
||||
.globl .pmix_atomic_cmpset_rel_32
|
||||
.csect [DS],3
|
||||
pmix_atomic_cmpset_rel_32:
|
||||
.long .pmix_atomic_cmpset_rel_32, TOC[tc0], 0
|
||||
.csect [PR]
|
||||
.align 2
|
||||
.pmix_atomic_cmpset_rel_32:
|
||||
eieio
|
||||
L5: lwarx 0, 0, 3
|
||||
cmpw 0, 0, 4
|
||||
bne- L6
|
||||
stwcx. 5, 0, 3
|
||||
bne- L5
|
||||
sync
|
||||
L6:
|
||||
xor 3,0,4
|
||||
subfic 5,3,0
|
||||
adde 3,5,3
|
||||
blr
|
||||
|
||||
|
||||
|
||||
.globl pmix_atomic_add_32
|
||||
.globl .pmix_atomic_add_32
|
||||
.csect [DS],3
|
||||
pmix_atomic_add_32:
|
||||
.long .pmix_atomic_add_32, TOC[tc0], 0
|
||||
.csect [PR]
|
||||
.align 2
|
||||
.pmix_atomic_add_32:
|
||||
L13: lwarx 0, 0, 3
|
||||
add 0, 4, 0
|
||||
stwcx. 0, 0, 3
|
||||
bne- L13
|
||||
mr 3,0
|
||||
blr
|
||||
|
||||
|
||||
.globl pmix_atomic_sub_32
|
||||
.globl .pmix_atomic_sub_32
|
||||
.csect [DS],3
|
||||
pmix_atomic_sub_32:
|
||||
.long .pmix_atomic_sub_32, TOC[tc0], 0
|
||||
.csect [PR]
|
||||
.align 2
|
||||
.pmix_atomic_sub_32:
|
||||
L14: lwarx 0,0,3
|
||||
subf 0,4,0
|
||||
stwcx. 0,0,3
|
||||
bne- L14
|
||||
mr 3,0
|
||||
blr
|
||||
|
||||
.globl pmix_sys_timer_get_cycles
|
||||
.globl .pmix_sys_timer_get_cycles
|
||||
.csect [DS],3
|
||||
pmix_sys_timer_get_cycles:
|
||||
.long .pmix_sys_timer_get_cycles, TOC[tc0], 0
|
||||
.csect [PR]
|
||||
.align 2
|
||||
.pmix_sys_timer_get_cycles:
|
||||
L15:
|
||||
mftbu 0
|
||||
mftb 11
|
||||
mftbu 2
|
||||
cmpw 7,2,0
|
||||
bne+ 7,L15
|
||||
li 4,0
|
||||
li 9,0
|
||||
or 3,2,9
|
||||
or 4,4,11
|
||||
blr
|
@ -1,118 +0,0 @@
|
||||
.text
|
||||
|
||||
.align 2
|
||||
.globl pmix_atomic_mb
|
||||
.type pmix_atomic_mb, @function
|
||||
pmix_atomic_mb:
|
||||
sync
|
||||
blr
|
||||
.size pmix_atomic_mb, .-pmix_atomic_mb
|
||||
|
||||
|
||||
.globl pmix_atomic_rmb
|
||||
.type pmix_atomic_rmb, @function
|
||||
pmix_atomic_rmb:
|
||||
lwsync
|
||||
blr
|
||||
.size pmix_atomic_rmb, .-pmix_atomic_rmb
|
||||
|
||||
|
||||
.globl pmix_atomic_wmb
|
||||
.type pmix_atomic_wmb, @function
|
||||
pmix_atomic_wmb:
|
||||
eieio
|
||||
blr
|
||||
.size pmix_atomic_wmb, .-pmix_atomic_wmb
|
||||
|
||||
|
||||
.globl pmix_atomic_cmpset_32
|
||||
.type pmix_atomic_cmpset_32, @function
|
||||
pmix_atomic_cmpset_32:
|
||||
.L1: lwarx 0, 0, 3
|
||||
cmpw 0, 0, 4
|
||||
bne- .L2
|
||||
stwcx. 5, 0, 3
|
||||
bne- .L1
|
||||
.L2:
|
||||
xor 3,0,4
|
||||
subfic 5,3,0
|
||||
adde 3,5,3
|
||||
blr
|
||||
.size pmix_atomic_cmpset_32, .-pmix_atomic_cmpset_32
|
||||
|
||||
|
||||
.globl pmix_atomic_cmpset_acq_32
|
||||
.type pmix_atomic_cmpset_acq_32, @function
|
||||
pmix_atomic_cmpset_acq_32:
|
||||
.L3: lwarx 0, 0, 3
|
||||
cmpw 0, 0, 4
|
||||
bne- .L4
|
||||
stwcx. 5, 0, 3
|
||||
bne- .L3
|
||||
sync
|
||||
.L4:
|
||||
xor 3,0,4
|
||||
subfic 5,3,0
|
||||
adde 3,5,3
|
||||
lwsync
|
||||
blr
|
||||
.size pmix_atomic_cmpset_acq_32, .-pmix_atomic_cmpset_acq_32
|
||||
|
||||
|
||||
.globl pmix_atomic_cmpset_rel_32
|
||||
.type pmix_atomic_cmpset_rel_32, @function
|
||||
pmix_atomic_cmpset_rel_32:
|
||||
eieio
|
||||
.L5: lwarx 0, 0, 3
|
||||
cmpw 0, 0, 4
|
||||
bne- .L6
|
||||
stwcx. 5, 0, 3
|
||||
bne- .L5
|
||||
sync
|
||||
.L6:
|
||||
xor 3,0,4
|
||||
subfic 5,3,0
|
||||
adde 3,5,3
|
||||
blr
|
||||
.size pmix_atomic_cmpset_rel_32, .-pmix_atomic_cmpset_rel_32
|
||||
|
||||
|
||||
|
||||
.globl pmix_atomic_add_32
|
||||
.type pmix_atomic_add_32, @function
|
||||
pmix_atomic_add_32:
|
||||
.L13: lwarx 0, 0, 3
|
||||
add 0, 4, 0
|
||||
stwcx. 0, 0, 3
|
||||
bne- .L13
|
||||
mr 3,0
|
||||
blr
|
||||
.size pmix_atomic_add_32, .-pmix_atomic_add_32
|
||||
|
||||
|
||||
.globl pmix_atomic_sub_32
|
||||
.type pmix_atomic_sub_32, @function
|
||||
pmix_atomic_sub_32:
|
||||
.L14: lwarx 0,0,3
|
||||
subf 0,4,0
|
||||
stwcx. 0,0,3
|
||||
bne- .L14
|
||||
mr 3,0
|
||||
blr
|
||||
.size pmix_atomic_sub_32, .-pmix_atomic_sub_32
|
||||
|
||||
.globl pmix_sys_timer_get_cycles
|
||||
.type pmix_sys_timer_get_cycles, @function
|
||||
pmix_sys_timer_get_cycles:
|
||||
.L15:
|
||||
mftbu 0
|
||||
mftb 11
|
||||
mftbu 2
|
||||
cmpw 7,2,0
|
||||
bne+ 7,.L15
|
||||
li 4,0
|
||||
li 9,0
|
||||
or 3,2,9
|
||||
or 4,4,11
|
||||
blr
|
||||
.size pmix_sys_timer_get_cycles, .-pmix_sys_timer_get_cycles
|
@ -1,120 +0,0 @@
|
||||
.text
|
||||
|
||||
.align 2
|
||||
.globl pmix_atomic_mb
|
||||
.type pmix_atomic_mb, @function
|
||||
pmix_atomic_mb:
|
||||
sync
|
||||
blr
|
||||
.size pmix_atomic_mb, .-pmix_atomic_mb
|
||||
|
||||
|
||||
.globl pmix_atomic_rmb
|
||||
.type pmix_atomic_rmb, @function
|
||||
pmix_atomic_rmb:
|
||||
lwsync
|
||||
blr
|
||||
.size pmix_atomic_rmb, .-pmix_atomic_rmb
|
||||
|
||||
|
||||
.globl pmix_atomic_wmb
|
||||
.type pmix_atomic_wmb, @function
|
||||
pmix_atomic_wmb:
|
||||
eieio
|
||||
blr
|
||||
.size pmix_atomic_wmb, .-pmix_atomic_wmb
|
||||
|
||||
|
||||
.globl pmix_atomic_cmpset_32
|
||||
.type pmix_atomic_cmpset_32, @function
|
||||
pmix_atomic_cmpset_32:
|
||||
.L1: lwarx 0, 0, 3
|
||||
cmpw 0, 0, 4
|
||||
bne- .L2
|
||||
stwcx. 5, 0, 3
|
||||
bne- .L1
|
||||
.L2:
|
||||
xor 3,0,4
|
||||
subfic 5,3,0
|
||||
adde 3,5,3
|
||||
blr
|
||||
.size pmix_atomic_cmpset_32, .-pmix_atomic_cmpset_32
|
||||
|
||||
|
||||
.globl pmix_atomic_cmpset_acq_32
|
||||
.type pmix_atomic_cmpset_acq_32, @function
|
||||
pmix_atomic_cmpset_acq_32:
|
||||
.L3: lwarx 0, 0, 3
|
||||
cmpw 0, 0, 4
|
||||
bne- .L4
|
||||
stwcx. 5, 0, 3
|
||||
bne- .L3
|
||||
sync
|
||||
.L4:
|
||||
xor 3,0,4
|
||||
subfic 5,3,0
|
||||
adde 3,5,3
|
||||
lwsync
|
||||
blr
|
||||
.size pmix_atomic_cmpset_acq_32, .-pmix_atomic_cmpset_acq_32
|
||||
|
||||
|
||||
.globl pmix_atomic_cmpset_rel_32
|
||||
.type pmix_atomic_cmpset_rel_32, @function
|
||||
pmix_atomic_cmpset_rel_32:
|
||||
eieio
|
||||
.L5: lwarx 0, 0, 3
|
||||
cmpw 0, 0, 4
|
||||
bne- .L6
|
||||
stwcx. 5, 0, 3
|
||||
bne- .L5
|
||||
sync
|
||||
.L6:
|
||||
xor 3,0,4
|
||||
subfic 5,3,0
|
||||
adde 3,5,3
|
||||
blr
|
||||
.size pmix_atomic_cmpset_rel_32, .-pmix_atomic_cmpset_rel_32
|
||||
|
||||
|
||||
|
||||
.globl pmix_atomic_add_32
|
||||
.type pmix_atomic_add_32, @function
|
||||
pmix_atomic_add_32:
|
||||
.L13: lwarx 0, 0, 3
|
||||
add 0, 4, 0
|
||||
stwcx. 0, 0, 3
|
||||
bne- .L13
|
||||
mr 3,0
|
||||
blr
|
||||
.size pmix_atomic_add_32, .-pmix_atomic_add_32
|
||||
|
||||
|
||||
.globl pmix_atomic_sub_32
|
||||
.type pmix_atomic_sub_32, @function
|
||||
pmix_atomic_sub_32:
|
||||
.L14: lwarx 0,0,3
|
||||
subf 0,4,0
|
||||
stwcx. 0,0,3
|
||||
bne- .L14
|
||||
mr 3,0
|
||||
blr
|
||||
.size pmix_atomic_sub_32, .-pmix_atomic_sub_32
|
||||
|
||||
.globl pmix_sys_timer_get_cycles
|
||||
.type pmix_sys_timer_get_cycles, @function
|
||||
pmix_sys_timer_get_cycles:
|
||||
.L15:
|
||||
mftbu 0
|
||||
mftb 11
|
||||
mftbu 2
|
||||
cmpw 7,2,0
|
||||
bne+ 7,.L15
|
||||
li 4,0
|
||||
li 9,0
|
||||
or 3,2,9
|
||||
or 4,4,11
|
||||
blr
|
||||
.size pmix_sys_timer_get_cycles, .-pmix_sys_timer_get_cycles
|
||||
|
||||
.section .note.GNU-stack,"",@progbits
|
@ -1,100 +0,0 @@
|
||||
.text
|
||||
|
||||
.align 2
|
||||
.globl _pmix_atomic_mb
|
||||
_pmix_atomic_mb:
|
||||
sync
|
||||
blr
|
||||
|
||||
|
||||
.globl _pmix_atomic_rmb
|
||||
_pmix_atomic_rmb:
|
||||
lwsync
|
||||
blr
|
||||
|
||||
|
||||
.globl _pmix_atomic_wmb
|
||||
_pmix_atomic_wmb:
|
||||
eieio
|
||||
blr
|
||||
|
||||
|
||||
.globl _pmix_atomic_cmpset_32
|
||||
_pmix_atomic_cmpset_32:
|
||||
L1: lwarx r0, 0, r3
|
||||
cmpw 0, r0, r4
|
||||
bne- L2
|
||||
stwcx. r5, 0, r3
|
||||
bne- L1
|
||||
L2:
|
||||
xor r3,r0,r4
|
||||
subfic r5,r3,0
|
||||
adde r3,r5,r3
|
||||
blr
|
||||
|
||||
|
||||
.globl _pmix_atomic_cmpset_acq_32
|
||||
_pmix_atomic_cmpset_acq_32:
|
||||
L3: lwarx r0, 0, r3
|
||||
cmpw 0, r0, r4
|
||||
bne- L4
|
||||
stwcx. r5, 0, r3
|
||||
bne- L3
|
||||
sync
|
||||
L4:
|
||||
xor r3,r0,r4
|
||||
subfic r5,r3,0
|
||||
adde r3,r5,r3
|
||||
lwsync
|
||||
blr
|
||||
|
||||
|
||||
.globl _pmix_atomic_cmpset_rel_32
|
||||
_pmix_atomic_cmpset_rel_32:
|
||||
eieio
|
||||
L5: lwarx r0, 0, r3
|
||||
cmpw 0, r0, r4
|
||||
bne- L6
|
||||
stwcx. r5, 0, r3
|
||||
bne- L5
|
||||
sync
|
||||
L6:
|
||||
xor r3,r0,r4
|
||||
subfic r5,r3,0
|
||||
adde r3,r5,r3
|
||||
blr
|
||||
|
||||
|
||||
|
||||
.globl _pmix_atomic_add_32
|
||||
_pmix_atomic_add_32:
|
||||
L13: lwarx r0, 0, r3
|
||||
add r0, r4, r0
|
||||
stwcx. r0, 0, r3
|
||||
bne- L13
|
||||
mr r3,r0
|
||||
blr
|
||||
|
||||
|
||||
.globl _pmix_atomic_sub_32
|
||||
_pmix_atomic_sub_32:
|
||||
L14: lwarx r0,0,r3
|
||||
subf r0,r4,r0
|
||||
stwcx. r0,0,r3
|
||||
bne- L14
|
||||
mr r3,r0
|
||||
blr
|
||||
|
||||
.globl _pmix_sys_timer_get_cycles
|
||||
_pmix_sys_timer_get_cycles:
|
||||
L15:
|
||||
mftbu r0
|
||||
mftb r11
|
||||
mftbu r2
|
||||
cmpw cr7,r2,r0
|
||||
bne+ cr7,L15
|
||||
li r4,0
|
||||
li r9,0
|
||||
or r3,r2,r9
|
||||
or r4,r4,r11
|
||||
blr
|
@ -1,230 +0,0 @@
|
||||
.machine "ppc64"
|
||||
.toc
|
||||
.csect .text[PR]
|
||||
|
||||
.align 2
|
||||
.globl pmix_atomic_mb
|
||||
.globl .pmix_atomic_mb
|
||||
.csect [DS],3
|
||||
pmix_atomic_mb:
|
||||
.llong .pmix_atomic_mb, TOC[tc0], 0
|
||||
.csect [PR]
|
||||
.align 2
|
||||
.pmix_atomic_mb:
|
||||
sync
|
||||
blr
|
||||
|
||||
|
||||
.globl pmix_atomic_rmb
|
||||
.globl .pmix_atomic_rmb
|
||||
.csect [DS],3
|
||||
pmix_atomic_rmb:
|
||||
.llong .pmix_atomic_rmb, TOC[tc0], 0
|
||||
.csect [PR]
|
||||
.align 2
|
||||
.pmix_atomic_rmb:
|
||||
lwsync
|
||||
blr
|
||||
|
||||
|
||||
.globl pmix_atomic_wmb
|
||||
.globl .pmix_atomic_wmb
|
||||
.csect [DS],3
|
||||
pmix_atomic_wmb:
|
||||
.llong .pmix_atomic_wmb, TOC[tc0], 0
|
||||
.csect [PR]
|
||||
.align 2
|
||||
.pmix_atomic_wmb:
|
||||
eieio
|
||||
blr
|
||||
|
||||
|
||||
.globl pmix_atomic_cmpset_32
|
||||
.globl .pmix_atomic_cmpset_32
|
||||
.csect [DS],3
|
||||
pmix_atomic_cmpset_32:
|
||||
.llong .pmix_atomic_cmpset_32, TOC[tc0], 0
|
||||
.csect [PR]
|
||||
.align 2
|
||||
.pmix_atomic_cmpset_32:
|
||||
L1: lwarx 0, 0, 3
|
||||
cmpw 0, 0, 4
|
||||
bne- L2
|
||||
stwcx. 5, 0, 3
|
||||
bne- L1
|
||||
L2:
|
||||
cmpw 7,0,4
|
||||
mfcr 3
|
||||
rlwinm 3,3,31,1
|
||||
blr
|
||||
|
||||
|
||||
.globl pmix_atomic_cmpset_acq_32
|
||||
.globl .pmix_atomic_cmpset_acq_32
|
||||
.csect [DS],3
|
||||
pmix_atomic_cmpset_acq_32:
|
||||
.llong .pmix_atomic_cmpset_acq_32, TOC[tc0], 0
|
||||
.csect [PR]
|
||||
.align 2
|
||||
.pmix_atomic_cmpset_acq_32:
|
||||
mflr 0
|
||||
std 29,-24(1)
|
||||
std 0,16(1)
|
||||
stdu 1,-144(1)
|
||||
bl .pmix_atomic_cmpset_32
|
||||
mr 29,3
|
||||
bl .pmix_atomic_rmb
|
||||
mr 3,29
|
||||
addi 1,1,144
|
||||
ld 0,16(1)
|
||||
mtlr 0
|
||||
ld 29,-24(1)
|
||||
blr
|
||||
|
||||
|
||||
.globl pmix_atomic_cmpset_rel_32
|
||||
.globl .pmix_atomic_cmpset_rel_32
|
||||
.csect [DS],3
|
||||
pmix_atomic_cmpset_rel_32:
|
||||
.llong .pmix_atomic_cmpset_rel_32, TOC[tc0], 0
|
||||
.csect [PR]
|
||||
.align 2
|
||||
.pmix_atomic_cmpset_rel_32:
|
||||
mflr 0
|
||||
std 27,-40(1)
|
||||
std 28,-32(1)
|
||||
std 29,-24(1)
|
||||
std 0,16(1)
|
||||
stdu 1,-160(1)
|
||||
mr 29,3
|
||||
mr 28,4
|
||||
mr 27,5
|
||||
bl .pmix_atomic_wmb
|
||||
mr 3,29
|
||||
mr 4,28
|
||||
mr 5,27
|
||||
bl .pmix_atomic_cmpset_32
|
||||
addi 1,1,160
|
||||
ld 0,16(1)
|
||||
mtlr 0
|
||||
ld 27,-40(1)
|
||||
ld 28,-32(1)
|
||||
ld 29,-24(1)
|
||||
blr
|
||||
|
||||
|
||||
.globl pmix_atomic_cmpset_64
|
||||
.globl .pmix_atomic_cmpset_64
|
||||
.csect [DS],3
|
||||
pmix_atomic_cmpset_64:
|
||||
.llong .pmix_atomic_cmpset_64, TOC[tc0], 0
|
||||
.csect [PR]
|
||||
.align 2
|
||||
.pmix_atomic_cmpset_64:
|
||||
L3: ldarx 0, 0, 3
|
||||
cmpd 0, 0, 4
|
||||
bne- L4
|
||||
stdcx. 5, 0, 3
|
||||
bne- L3
|
||||
L4:
|
||||
xor 3,4,0
|
||||
subfic 5,3,0
|
||||
adde 3,5,3
|
||||
blr
|
||||
|
||||
|
||||
.globl pmix_atomic_cmpset_acq_64
|
||||
.globl .pmix_atomic_cmpset_acq_64
|
||||
.csect [DS],3
|
||||
pmix_atomic_cmpset_acq_64:
|
||||
.llong .pmix_atomic_cmpset_acq_64, TOC[tc0], 0
|
||||
.csect [PR]
|
||||
.align 2
|
||||
.pmix_atomic_cmpset_acq_64:
|
||||
L7: ldarx 0, 0, 3
|
||||
cmpd 0, 0, 4
|
||||
bne- L8
|
||||
stdcx. 5, 0, 3
|
||||
bne- L7
|
||||
L8:
|
||||
lwsync
|
||||
xor 3,4,0
|
||||
subfic 5,3,0
|
||||
adde 3,5,3
|
||||
blr
|
||||
|
||||
|
||||
.globl pmix_atomic_cmpset_rel_64
|
||||
.globl .pmix_atomic_cmpset_rel_64
|
||||
.csect [DS],3
|
||||
pmix_atomic_cmpset_rel_64:
|
||||
.llong .pmix_atomic_cmpset_rel_64, TOC[tc0], 0
|
||||
.csect [PR]
|
||||
.align 2
|
||||
.pmix_atomic_cmpset_rel_64:
|
||||
eieio
|
||||
L9: ldarx 0, 0, 3
|
||||
cmpd 0, 0, 4
|
||||
bne- L10
|
||||
stdcx. 5, 0, 3
|
||||
bne- L9
|
||||
L10:
|
||||
xor 3,4,0
|
||||
subfic 5,3,0
|
||||
adde 3,5,3
|
||||
blr
|
||||
|
||||
|
||||
.globl pmix_atomic_add_32
|
||||
.globl .pmix_atomic_add_32
|
||||
.csect [DS],3
|
||||
pmix_atomic_add_32:
|
||||
.llong .pmix_atomic_add_32, TOC[tc0], 0
|
||||
.csect [PR]
|
||||
.align 2
|
||||
.pmix_atomic_add_32:
|
||||
L5: lwarx 0, 0, 3
|
||||
add 0, 4, 0
|
||||
stwcx. 0, 0, 3
|
||||
bne- L5
|
||||
|
||||
mr 3,0
|
||||
blr
|
||||
|
||||
|
||||
.globl pmix_atomic_sub_32
|
||||
.globl .pmix_atomic_sub_32
|
||||
.csect [DS],3
|
||||
pmix_atomic_sub_32:
|
||||
.llong .pmix_atomic_sub_32, TOC[tc0], 0
|
||||
.csect [PR]
|
||||
.align 2
|
||||
.pmix_atomic_sub_32:
|
||||
L6: lwarx 0,0,3
|
||||
subf 0,4,0
|
||||
stwcx. 0,0,3
|
||||
bne- L6
|
||||
|
||||
mr 3,0
|
||||
blr
|
||||
|
||||
.globl pmix_sys_timer_get_cycles
|
||||
.globl .pmix_sys_timer_get_cycles
|
||||
.csect [DS],3
|
||||
pmix_sys_timer_get_cycles:
|
||||
.llong .pmix_sys_timer_get_cycles, TOC[tc0], 0
|
||||
.csect [PR]
|
||||
.align 2
|
||||
.pmix_sys_timer_get_cycles:
|
||||
L11:
|
||||
mftbu 2
|
||||
rldicl 2,2,0,32
|
||||
mftb 0
|
||||
rldicl 9,0,0,32
|
||||
mftbu 0
|
||||
rldicl 0,0,0,32
|
||||
cmpw 7,0,2
|
||||
bne 7,L11
|
||||
sldi 3,0,32
|
||||
or 3,3,9
|
||||
blr
|
@ -1,180 +0,0 @@
|
||||
.text
|
||||
|
||||
.align 2
|
||||
.globl .pmix_atomic_mb
|
||||
.type .pmix_atomic_mb, @function
|
||||
.pmix_atomic_mb:
|
||||
sync
|
||||
blr
|
||||
.size .pmix_atomic_mb, .-.pmix_atomic_mb
|
||||
|
||||
|
||||
.globl .pmix_atomic_rmb
|
||||
.type .pmix_atomic_rmb, @function
|
||||
.pmix_atomic_rmb:
|
||||
lwsync
|
||||
blr
|
||||
.size .pmix_atomic_rmb, .-.pmix_atomic_rmb
|
||||
|
||||
|
||||
.globl .pmix_atomic_wmb
|
||||
.type .pmix_atomic_wmb, @function
|
||||
.pmix_atomic_wmb:
|
||||
eieio
|
||||
blr
|
||||
.size .pmix_atomic_wmb, .-.pmix_atomic_wmb
|
||||
|
||||
|
||||
.globl .pmix_atomic_cmpset_32
|
||||
.type .pmix_atomic_cmpset_32, @function
|
||||
.pmix_atomic_cmpset_32:
|
||||
.L1: lwarx 0, 0, 3
|
||||
cmpw 0, 0, 4
|
||||
bne- .L2
|
||||
stwcx. 5, 0, 3
|
||||
bne- .L1
|
||||
.L2:
|
||||
cmpw 7,0,4
|
||||
mfcr 3
|
||||
rlwinm 3,3,31,1
|
||||
blr
|
||||
.size .pmix_atomic_cmpset_32, .-.pmix_atomic_cmpset_32
|
||||
|
||||
|
||||
.globl .pmix_atomic_cmpset_acq_32
|
||||
.type .pmix_atomic_cmpset_acq_32, @function
|
||||
.pmix_atomic_cmpset_acq_32:
|
||||
mflr 0
|
||||
std 29,-24(1)
|
||||
std 0,16(1)
|
||||
stdu 1,-144(1)
|
||||
bl .pmix_atomic_cmpset_32
|
||||
mr 29,3
|
||||
bl .pmix_atomic_rmb
|
||||
mr 3,29
|
||||
addi 1,1,144
|
||||
ld 0,16(1)
|
||||
mtlr 0
|
||||
ld 29,-24(1)
|
||||
blr
|
||||
.size .pmix_atomic_cmpset_acq_32, .-.pmix_atomic_cmpset_acq_32
|
||||
|
||||
|
||||
.globl .pmix_atomic_cmpset_rel_32
|
||||
.type .pmix_atomic_cmpset_rel_32, @function
|
||||
.pmix_atomic_cmpset_rel_32:
|
||||
mflr 0
|
||||
std 27,-40(1)
|
||||
std 28,-32(1)
|
||||
std 29,-24(1)
|
||||
std 0,16(1)
|
||||
stdu 1,-160(1)
|
||||
mr 29,3
|
||||
mr 28,4
|
||||
mr 27,5
|
||||
bl .pmix_atomic_wmb
|
||||
mr 3,29
|
||||
mr 4,28
|
||||
mr 5,27
|
||||
bl .pmix_atomic_cmpset_32
|
||||
addi 1,1,160
|
||||
ld 0,16(1)
|
||||
mtlr 0
|
||||
ld 27,-40(1)
|
||||
ld 28,-32(1)
|
||||
ld 29,-24(1)
|
||||
blr
|
||||
.size .pmix_atomic_cmpset_rel_32, .-.pmix_atomic_cmpset_rel_32
|
||||
|
||||
|
||||
.globl .pmix_atomic_cmpset_64
|
||||
.type .pmix_atomic_cmpset_64, @function
|
||||
.pmix_atomic_cmpset_64:
|
||||
.L3: ldarx 0, 0, 3
|
||||
cmpd 0, 0, 4
|
||||
bne- .L4
|
||||
stdcx. 5, 0, 3
|
||||
bne- .L3
|
||||
.L4:
|
||||
xor 3,4,0
|
||||
subfic 5,3,0
|
||||
adde 3,5,3
|
||||
blr
|
||||
.size .pmix_atomic_cmpset_64, .-.pmix_atomic_cmpset_64
|
||||
|
||||
|
||||
.globl .pmix_atomic_cmpset_acq_64
|
||||
.type .pmix_atomic_cmpset_acq_64, @function
|
||||
.pmix_atomic_cmpset_acq_64:
|
||||
.L7: ldarx 0, 0, 3
|
||||
cmpd 0, 0, 4
|
||||
bne- .L8
|
||||
stdcx. 5, 0, 3
|
||||
bne- .L7
|
||||
.L8:
|
||||
lwsync
|
||||
xor 3,4,0
|
||||
subfic 5,3,0
|
||||
adde 3,5,3
|
||||
blr
|
||||
.size .pmix_atomic_cmpset_acq_64, .-.pmix_atomic_cmpset_acq_64
|
||||
|
||||
|
||||
.globl .pmix_atomic_cmpset_rel_64
|
||||
.type .pmix_atomic_cmpset_rel_64, @function
|
||||
.pmix_atomic_cmpset_rel_64:
|
||||
eieio
|
||||
.L9: ldarx 0, 0, 3
|
||||
cmpd 0, 0, 4
|
||||
bne- .L10
|
||||
stdcx. 5, 0, 3
|
||||
bne- .L9
|
||||
.L10:
|
||||
xor 3,4,0
|
||||
subfic 5,3,0
|
||||
adde 3,5,3
|
||||
blr
|
||||
.size .pmix_atomic_cmpset_rel_64, .-.pmix_atomic_cmpset_rel_64
|
||||
|
||||
|
||||
.globl .pmix_atomic_add_32
|
||||
.type .pmix_atomic_add_32, @function
|
||||
.pmix_atomic_add_32:
|
||||
.L5: lwarx 0, 0, 3
|
||||
add 0, 4, 0
|
||||
stwcx. 0, 0, 3
|
||||
bne- .L5
|
||||
|
||||
mr 3,0
|
||||
blr
|
||||
.size .pmix_atomic_add_32, .-.pmix_atomic_add_32
|
||||
|
||||
|
||||
.globl .pmix_atomic_sub_32
|
||||
.type .pmix_atomic_sub_32, @function
|
||||
.pmix_atomic_sub_32:
|
||||
.L6: lwarx 0,0,3
|
||||
subf 0,4,0
|
||||
stwcx. 0,0,3
|
||||
bne- .L6
|
||||
|
||||
mr 3,0
|
||||
blr
|
||||
.size .pmix_atomic_sub_32, .-.pmix_atomic_sub_32
|
||||
|
||||
.globl .pmix_sys_timer_get_cycles
|
||||
.type .pmix_sys_timer_get_cycles, @function
|
||||
.pmix_sys_timer_get_cycles:
|
||||
.L11:
|
||||
mftbu 2
|
||||
rldicl 2,2,0,32
|
||||
mftb 0
|
||||
rldicl 9,0,0,32
|
||||
mftbu 0
|
||||
rldicl 0,0,0,32
|
||||
cmpw 7,0,2
|
||||
bne 7,.L11
|
||||
sldi 3,0,32
|
||||
or 3,3,9
|
||||
blr
|
||||
.size .pmix_sys_timer_get_cycles, .-.pmix_sys_timer_get_cycles
|
@ -1,182 +0,0 @@
|
||||
.text
|
||||
|
||||
.align 2
|
||||
.globl .pmix_atomic_mb
|
||||
.type .pmix_atomic_mb, @function
|
||||
.pmix_atomic_mb:
|
||||
sync
|
||||
blr
|
||||
.size .pmix_atomic_mb, .-.pmix_atomic_mb
|
||||
|
||||
|
||||
.globl .pmix_atomic_rmb
|
||||
.type .pmix_atomic_rmb, @function
|
||||
.pmix_atomic_rmb:
|
||||
lwsync
|
||||
blr
|
||||
.size .pmix_atomic_rmb, .-.pmix_atomic_rmb
|
||||
|
||||
|
||||
.globl .pmix_atomic_wmb
|
||||
.type .pmix_atomic_wmb, @function
|
||||
.pmix_atomic_wmb:
|
||||
eieio
|
||||
blr
|
||||
.size .pmix_atomic_wmb, .-.pmix_atomic_wmb
|
||||
|
||||
|
||||
.globl .pmix_atomic_cmpset_32
|
||||
.type .pmix_atomic_cmpset_32, @function
|
||||
.pmix_atomic_cmpset_32:
|
||||
.L1: lwarx 0, 0, 3
|
||||
cmpw 0, 0, 4
|
||||
bne- .L2
|
||||
stwcx. 5, 0, 3
|
||||
bne- .L1
|
||||
.L2:
|
||||
cmpw 7,0,4
|
||||
mfcr 3
|
||||
rlwinm 3,3,31,1
|
||||
blr
|
||||
.size .pmix_atomic_cmpset_32, .-.pmix_atomic_cmpset_32
|
||||
|
||||
|
||||
.globl .pmix_atomic_cmpset_acq_32
|
||||
.type .pmix_atomic_cmpset_acq_32, @function
|
||||
.pmix_atomic_cmpset_acq_32:
|
||||
mflr 0
|
||||
std 29,-24(1)
|
||||
std 0,16(1)
|
||||
stdu 1,-144(1)
|
||||
bl .pmix_atomic_cmpset_32
|
||||
mr 29,3
|
||||
bl .pmix_atomic_rmb
|
||||
mr 3,29
|
||||
addi 1,1,144
|
||||
ld 0,16(1)
|
||||
mtlr 0
|
||||
ld 29,-24(1)
|
||||
blr
|
||||
.size .pmix_atomic_cmpset_acq_32, .-.pmix_atomic_cmpset_acq_32
|
||||
|
||||
|
||||
.globl .pmix_atomic_cmpset_rel_32
|
||||
.type .pmix_atomic_cmpset_rel_32, @function
|
||||
.pmix_atomic_cmpset_rel_32:
|
||||
mflr 0
|
||||
std 27,-40(1)
|
||||
std 28,-32(1)
|
||||
std 29,-24(1)
|
||||
std 0,16(1)
|
||||
stdu 1,-160(1)
|
||||
mr 29,3
|
||||
mr 28,4
|
||||
mr 27,5
|
||||
bl .pmix_atomic_wmb
|
||||
mr 3,29
|
||||
mr 4,28
|
||||
mr 5,27
|
||||
bl .pmix_atomic_cmpset_32
|
||||
addi 1,1,160
|
||||
ld 0,16(1)
|
||||
mtlr 0
|
||||
ld 27,-40(1)
|
||||
ld 28,-32(1)
|
||||
ld 29,-24(1)
|
||||
blr
|
||||
.size .pmix_atomic_cmpset_rel_32, .-.pmix_atomic_cmpset_rel_32
|
||||
|
||||
|
||||
.globl .pmix_atomic_cmpset_64
|
||||
.type .pmix_atomic_cmpset_64, @function
|
||||
.pmix_atomic_cmpset_64:
|
||||
.L3: ldarx 0, 0, 3
|
||||
cmpd 0, 0, 4
|
||||
bne- .L4
|
||||
stdcx. 5, 0, 3
|
||||
bne- .L3
|
||||
.L4:
|
||||
xor 3,4,0
|
||||
subfic 5,3,0
|
||||
adde 3,5,3
|
||||
blr
|
||||
.size .pmix_atomic_cmpset_64, .-.pmix_atomic_cmpset_64
|
||||
|
||||
|
||||
.globl .pmix_atomic_cmpset_acq_64
|
||||
.type .pmix_atomic_cmpset_acq_64, @function
|
||||
.pmix_atomic_cmpset_acq_64:
|
||||
.L7: ldarx 0, 0, 3
|
||||
cmpd 0, 0, 4
|
||||
bne- .L8
|
||||
stdcx. 5, 0, 3
|
||||
bne- .L7
|
||||
.L8:
|
||||
lwsync
|
||||
xor 3,4,0
|
||||
subfic 5,3,0
|
||||
adde 3,5,3
|
||||
blr
|
||||
.size .pmix_atomic_cmpset_acq_64, .-.pmix_atomic_cmpset_acq_64
|
||||
|
||||
|
||||
.globl .pmix_atomic_cmpset_rel_64
|
||||
.type .pmix_atomic_cmpset_rel_64, @function
|
||||
.pmix_atomic_cmpset_rel_64:
|
||||
eieio
|
||||
.L9: ldarx 0, 0, 3
|
||||
cmpd 0, 0, 4
|
||||
bne- .L10
|
||||
stdcx. 5, 0, 3
|
||||
bne- .L9
|
||||
.L10:
|
||||
xor 3,4,0
|
||||
subfic 5,3,0
|
||||
adde 3,5,3
|
||||
blr
|
||||
.size .pmix_atomic_cmpset_rel_64, .-.pmix_atomic_cmpset_rel_64
|
||||
|
||||
|
||||
.globl .pmix_atomic_add_32
|
||||
.type .pmix_atomic_add_32, @function
|
||||
.pmix_atomic_add_32:
|
||||
.L5: lwarx 0, 0, 3
|
||||
add 0, 4, 0
|
||||
stwcx. 0, 0, 3
|
||||
bne- .L5
|
||||
|
||||
mr 3,0
|
||||
blr
|
||||
.size .pmix_atomic_add_32, .-.pmix_atomic_add_32
|
||||
|
||||
|
||||
.globl .pmix_atomic_sub_32
|
||||
.type .pmix_atomic_sub_32, @function
|
||||
.pmix_atomic_sub_32:
|
||||
.L6: lwarx 0,0,3
|
||||
subf 0,4,0
|
||||
stwcx. 0,0,3
|
||||
bne- .L6
|
||||
|
||||
mr 3,0
|
||||
blr
|
||||
.size .pmix_atomic_sub_32, .-.pmix_atomic_sub_32
|
||||
|
||||
.globl .pmix_sys_timer_get_cycles
|
||||
.type .pmix_sys_timer_get_cycles, @function
|
||||
.pmix_sys_timer_get_cycles:
|
||||
.L11:
|
||||
mftbu 2
|
||||
rldicl 2,2,0,32
|
||||
mftb 0
|
||||
rldicl 9,0,0,32
|
||||
mftbu 0
|
||||
rldicl 0,0,0,32
|
||||
cmpw 7,0,2
|
||||
bne 7,.L11
|
||||
sldi 3,0,32
|
||||
or 3,3,9
|
||||
blr
|
||||
.size .pmix_sys_timer_get_cycles, .-.pmix_sys_timer_get_cycles
|
||||
|
||||
.section .note.GNU-stack,"",@progbits
|
@ -1,156 +0,0 @@
|
||||
.text
|
||||
|
||||
.align 2
|
||||
.globl _pmix_atomic_mb
|
||||
_pmix_atomic_mb:
|
||||
sync
|
||||
blr
|
||||
|
||||
|
||||
.globl _pmix_atomic_rmb
|
||||
_pmix_atomic_rmb:
|
||||
lwsync
|
||||
blr
|
||||
|
||||
|
||||
.globl _pmix_atomic_wmb
|
||||
_pmix_atomic_wmb:
|
||||
eieio
|
||||
blr
|
||||
|
||||
|
||||
.globl _pmix_atomic_cmpset_32
|
||||
_pmix_atomic_cmpset_32:
|
||||
L1: lwarx r0, 0, r3
|
||||
cmpw 0, r0, r4
|
||||
bne- L2
|
||||
stwcx. r5, 0, r3
|
||||
bne- L1
|
||||
L2:
|
||||
cmpw cr7,r0,r4
|
||||
mfcr r3
|
||||
rlwinm r3,r3,31,1
|
||||
blr
|
||||
|
||||
|
||||
.globl _pmix_atomic_cmpset_acq_32
|
||||
_pmix_atomic_cmpset_acq_32:
|
||||
mflr r0
|
||||
std r29,-24(r1)
|
||||
std r0,16(r1)
|
||||
stdu r1,-144(r1)
|
||||
bl _pmix_atomic_cmpset_32
|
||||
mr r29,r3
|
||||
bl _pmix_atomic_rmb
|
||||
mr r3,r29
|
||||
addi r1,r1,144
|
||||
ld r0,16(r1)
|
||||
mtlr r0
|
||||
ld r29,-24(r1)
|
||||
blr
|
||||
|
||||
|
||||
.globl _pmix_atomic_cmpset_rel_32
|
||||
_pmix_atomic_cmpset_rel_32:
|
||||
mflr r0
|
||||
std r27,-40(r1)
|
||||
std r28,-32(r1)
|
||||
std r29,-24(r1)
|
||||
std r0,16(r1)
|
||||
stdu r1,-160(r1)
|
||||
mr r29,r3
|
||||
mr r28,r4
|
||||
mr r27,r5
|
||||
bl _pmix_atomic_wmb
|
||||
mr r3,r29
|
||||
mr r4,r28
|
||||
mr r5,r27
|
||||
bl _pmix_atomic_cmpset_32
|
||||
addi r1,r1,160
|
||||
ld r0,16(r1)
|
||||
mtlr r0
|
||||
ld r27,-40(r1)
|
||||
ld r28,-32(r1)
|
||||
ld r29,-24(r1)
|
||||
blr
|
||||
|
||||
|
||||
.globl _pmix_atomic_cmpset_64
|
||||
_pmix_atomic_cmpset_64:
|
||||
L3: ldarx r0, 0, r3
|
||||
cmpd 0, r0, r4
|
||||
bne- L4
|
||||
stdcx. r5, 0, r3
|
||||
bne- L3
|
||||
L4:
|
||||
xor r3,r4,r0
|
||||
subfic r5,r3,0
|
||||
adde r3,r5,r3
|
||||
blr
|
||||
|
||||
|
||||
.globl _pmix_atomic_cmpset_acq_64
|
||||
_pmix_atomic_cmpset_acq_64:
|
||||
L7: ldarx r0, 0, r3
|
||||
cmpd 0, r0, r4
|
||||
bne- L8
|
||||
stdcx. r5, 0, r3
|
||||
bne- L7
|
||||
L8:
|
||||
lwsync
|
||||
xor r3,r4,r0
|
||||
subfic r5,r3,0
|
||||
adde r3,r5,r3
|
||||
blr
|
||||
|
||||
|
||||
.globl _pmix_atomic_cmpset_rel_64
|
||||
_pmix_atomic_cmpset_rel_64:
|
||||
eieio
|
||||
L9: ldarx r0, 0, r3
|
||||
cmpd 0, r0, r4
|
||||
bne- L10
|
||||
stdcx. r5, 0, r3
|
||||
bne- L9
|
||||
L10:
|
||||
xor r3,r4,r0
|
||||
subfic r5,r3,0
|
||||
adde r3,r5,r3
|
||||
blr
|
||||
|
||||
|
||||
.globl _pmix_atomic_add_32
|
||||
_pmix_atomic_add_32:
|
||||
L5: lwarx r0, 0, r3
|
||||
add r0, r4, r0
|
||||
stwcx. r0, 0, r3
|
||||
bne- L5
|
||||
|
||||
mr r3,r0
|
||||
blr
|
||||
|
||||
|
||||
.globl _pmix_atomic_sub_32
|
||||
_pmix_atomic_sub_32:
|
||||
L6: lwarx r0,0,r3
|
||||
subf r0,r4,r0
|
||||
stwcx. r0,0,r3
|
||||
bne- L6
|
||||
|
||||
mr r3,r0
|
||||
blr
|
||||
|
||||
.globl _pmix_sys_timer_get_cycles
|
||||
_pmix_sys_timer_get_cycles:
|
||||
L11:
|
||||
mftbu r2
|
||||
rldicl r2,r2,0,32
|
||||
mftb r0
|
||||
rldicl r9,r0,0,32
|
||||
mftbu r0
|
||||
rldicl r0,r0,0,32
|
||||
cmpw cr7,r0,r2
|
||||
bne cr7,L11
|
||||
sldi r3,r0,32
|
||||
or r3,r3,r9
|
||||
blr
|
@ -1,190 +0,0 @@
|
||||
.text
|
||||
|
||||
.align 4
|
||||
|
||||
|
||||
.globl pmix_atomic_mb
|
||||
.type pmix_atomic_mb, #function
|
||||
pmix_atomic_mb:
|
||||
!#PROLOGUE# 0
|
||||
!#PROLOGUE# 1
|
||||
membar #LoadLoad | #LoadStore | #StoreStore | #StoreLoad
|
||||
retl
|
||||
nop
|
||||
.size pmix_atomic_mb, .-pmix_atomic_mb
|
||||
|
||||
|
||||
.globl pmix_atomic_rmb
|
||||
.type pmix_atomic_rmb, #function
|
||||
pmix_atomic_rmb:
|
||||
!#PROLOGUE# 0
|
||||
!#PROLOGUE# 1
|
||||
membar #LoadLoad
|
||||
retl
|
||||
nop
|
||||
.size pmix_atomic_rmb, .-pmix_atomic_rmb
|
||||
|
||||
|
||||
.globl pmix_atomic_wmb
|
||||
.type pmix_atomic_wmb, #function
|
||||
pmix_atomic_wmb:
|
||||
!#PROLOGUE# 0
|
||||
!#PROLOGUE# 1
|
||||
membar #StoreStore
|
||||
retl
|
||||
nop
|
||||
.size pmix_atomic_wmb, .-pmix_atomic_wmb
|
||||
|
||||
|
||||
.globl pmix_atomic_cmpset_32
|
||||
.type pmix_atomic_cmpset_32, #function
|
||||
pmix_atomic_cmpset_32:
|
||||
!#PROLOGUE# 0
|
||||
!#PROLOGUE# 1
|
||||
casa [%o0] 0x80, %o1, %o2
|
||||
xor %o2, %o1, %o2
|
||||
subcc %g0, %o2, %g0
|
||||
retl
|
||||
subx %g0, -1, %o0
|
||||
.size pmix_atomic_cmpset_32, .-pmix_atomic_cmpset_32
|
||||
|
||||
|
||||
.globl pmix_atomic_cmpset_acq_32
|
||||
.type pmix_atomic_cmpset_acq_32, #function
|
||||
pmix_atomic_cmpset_acq_32:
|
||||
!#PROLOGUE# 0
|
||||
!#PROLOGUE# 1
|
||||
casa [%o0] 0x80, %o1, %o2
|
||||
xor %o2, %o1, %o2
|
||||
subcc %g0, %o2, %g0
|
||||
subx %g0, -1, %o0
|
||||
membar #LoadLoad
|
||||
retl
|
||||
sra %o0, 0, %o0
|
||||
.size pmix_atomic_cmpset_acq_32, .-pmix_atomic_cmpset_acq_32
|
||||
|
||||
|
||||
.globl pmix_atomic_cmpset_rel_32
|
||||
.type pmix_atomic_cmpset_rel_32, #function
|
||||
pmix_atomic_cmpset_rel_32:
|
||||
!#PROLOGUE# 0
|
||||
!#PROLOGUE# 1
|
||||
membar #StoreStore
|
||||
casa [%o0] 0x80, %o1, %o2
|
||||
xor %o2, %o1, %o2
|
||||
subcc %g0, %o2, %g0
|
||||
retl
|
||||
subx %g0, -1, %o0
|
||||
.size pmix_atomic_cmpset_rel_32, .-pmix_atomic_cmpset_rel_32
|
||||
|
||||
|
||||
.globl pmix_atomic_cmpset_64
|
||||
.type pmix_atomic_cmpset_64, #function
|
||||
pmix_atomic_cmpset_64:
|
||||
!#PROLOGUE# 0
|
||||
save %sp, -128, %sp
|
||||
!#PROLOGUE# 1
|
||||
mov %i3, %o4
|
||||
mov %i4, %o5
|
||||
st %i1, [%fp-32]
|
||||
st %i2, [%fp-28]
|
||||
std %o4, [%fp-24]
|
||||
ldx [%fp-24], %g1
|
||||
ldx [%fp-32], %g2
|
||||
casxa [%i0] 0x80, %g2, %g1
|
||||
stx %g1, [%fp-24]
|
||||
|
||||
ld [%fp-24], %i5
|
||||
ld [%fp-32], %g1
|
||||
cmp %i5, %g1
|
||||
bne .L12
|
||||
mov 0, %i0
|
||||
ld [%fp-20], %i2
|
||||
ld [%fp-28], %i1
|
||||
cmp %i2, %i1
|
||||
be,a .L12
|
||||
mov 1, %i0
|
||||
.L12:
|
||||
ret
|
||||
restore
|
||||
.size pmix_atomic_cmpset_64, .-pmix_atomic_cmpset_64
|
||||
|
||||
|
||||
.globl pmix_atomic_cmpset_acq_64
|
||||
.type pmix_atomic_cmpset_acq_64, #function
|
||||
pmix_atomic_cmpset_acq_64:
|
||||
!#PROLOGUE# 0
|
||||
save %sp, -128, %sp
|
||||
!#PROLOGUE# 1
|
||||
mov %i1, %o4
|
||||
mov %i2, %o5
|
||||
mov %i3, %o2
|
||||
mov %i4, %o3
|
||||
std %o4, [%fp-32]
|
||||
std %o2, [%fp-24]
|
||||
ldx [%fp-24], %g1
|
||||
ldx [%fp-32], %g2
|
||||
casxa [%i0] 0x80, %g2, %g1
|
||||
stx %g1, [%fp-24]
|
||||
|
||||
ld [%fp-24], %i5
|
||||
ld [%fp-32], %g1
|
||||
cmp %i5, %g1
|
||||
bne .L16
|
||||
mov 0, %i0
|
||||
ld [%fp-20], %i2
|
||||
ld [%fp-28], %i1
|
||||
cmp %i2, %i1
|
||||
be,a .L16
|
||||
mov 1, %i0
|
||||
.L16:
|
||||
membar #LoadLoad
|
||||
ret
|
||||
restore
|
||||
.size pmix_atomic_cmpset_acq_64, .-pmix_atomic_cmpset_acq_64
|
||||
|
||||
|
||||
.globl pmix_atomic_cmpset_rel_64
|
||||
.type pmix_atomic_cmpset_rel_64, #function
|
||||
pmix_atomic_cmpset_rel_64:
|
||||
!#PROLOGUE# 0
|
||||
save %sp, -128, %sp
|
||||
!#PROLOGUE# 1
|
||||
mov %i1, %o4
|
||||
mov %i2, %o5
|
||||
mov %i3, %o2
|
||||
mov %i4, %o3
|
||||
membar #StoreStore
|
||||
std %o4, [%fp-32]
|
||||
std %o2, [%fp-24]
|
||||
ldx [%fp-24], %g1
|
||||
ldx [%fp-32], %g2
|
||||
casxa [%i0] 0x80, %g2, %g1
|
||||
stx %g1, [%fp-24]
|
||||
|
||||
ld [%fp-24], %i5
|
||||
ld [%fp-32], %g1
|
||||
cmp %i5, %g1
|
||||
bne .L21
|
||||
mov 0, %i0
|
||||
ld [%fp-20], %i2
|
||||
ld [%fp-28], %i1
|
||||
cmp %i2, %i1
|
||||
be,a .L21
|
||||
mov 1, %i0
|
||||
.L21:
|
||||
ret
|
||||
restore
|
||||
.size pmix_atomic_cmpset_rel_64, .-pmix_atomic_cmpset_rel_64
|
||||
|
||||
|
||||
.globl pmix_sys_timer_get_cycles
|
||||
.type pmix_sys_timer_get_cycles, #function
|
||||
pmix_sys_timer_get_cycles:
|
||||
save %sp,-96,%sp
|
||||
rd %tick,%o0
|
||||
srlx %o0,32,%o1
|
||||
or %g0,%o1,%i0
|
||||
ret ! Result = %i0
|
||||
restore %o0,0,%o1
|
||||
.size pmix_sys_timer_get_cycles, .-pmix_sys_timer_get_cycles
|
@ -1,130 +0,0 @@
|
||||
.text
|
||||
|
||||
.align 4
|
||||
|
||||
|
||||
.globl pmix_atomic_mb
|
||||
.type pmix_atomic_mb, #function
|
||||
pmix_atomic_mb:
|
||||
!#PROLOGUE# 0
|
||||
!#PROLOGUE# 1
|
||||
membar #LoadLoad | #LoadStore | #StoreStore | #StoreLoad
|
||||
retl
|
||||
nop
|
||||
.size pmix_atomic_mb, .-pmix_atomic_mb
|
||||
|
||||
|
||||
.globl pmix_atomic_rmb
|
||||
.type pmix_atomic_rmb, #function
|
||||
pmix_atomic_rmb:
|
||||
!#PROLOGUE# 0
|
||||
!#PROLOGUE# 1
|
||||
membar #LoadLoad
|
||||
retl
|
||||
nop
|
||||
.size pmix_atomic_rmb, .-pmix_atomic_rmb
|
||||
|
||||
|
||||
.globl pmix_atomic_wmb
|
||||
.type pmix_atomic_wmb, #function
|
||||
pmix_atomic_wmb:
|
||||
!#PROLOGUE# 0
|
||||
!#PROLOGUE# 1
|
||||
membar #StoreStore
|
||||
retl
|
||||
nop
|
||||
.size pmix_atomic_wmb, .-pmix_atomic_wmb
|
||||
|
||||
|
||||
.globl pmix_atomic_cmpset_32
|
||||
.type pmix_atomic_cmpset_32, #function
|
||||
pmix_atomic_cmpset_32:
|
||||
!#PROLOGUE# 0
|
||||
!#PROLOGUE# 1
|
||||
casa [%o0] 0x80, %o1, %o2
|
||||
xor %o2, %o1, %o2
|
||||
subcc %g0, %o2, %g0
|
||||
retl
|
||||
subx %g0, -1, %o0
|
||||
.size pmix_atomic_cmpset_32, .-pmix_atomic_cmpset_32
|
||||
|
||||
|
||||
.globl pmix_atomic_cmpset_acq_32
|
||||
.type pmix_atomic_cmpset_acq_32, #function
|
||||
pmix_atomic_cmpset_acq_32:
|
||||
!#PROLOGUE# 0
|
||||
!#PROLOGUE# 1
|
||||
casa [%o0] 0x80, %o1, %o2
|
||||
xor %o2, %o1, %o2
|
||||
subcc %g0, %o2, %g0
|
||||
subx %g0, -1, %o0
|
||||
membar #LoadLoad
|
||||
retl
|
||||
sra %o0, 0, %o0
|
||||
.size pmix_atomic_cmpset_acq_32, .-pmix_atomic_cmpset_acq_32
|
||||
|
||||
|
||||
.globl pmix_atomic_cmpset_rel_32
|
||||
.type pmix_atomic_cmpset_rel_32, #function
|
||||
pmix_atomic_cmpset_rel_32:
|
||||
!#PROLOGUE# 0
|
||||
!#PROLOGUE# 1
|
||||
membar #StoreStore
|
||||
casa [%o0] 0x80, %o1, %o2
|
||||
xor %o2, %o1, %o2
|
||||
subcc %g0, %o2, %g0
|
||||
retl
|
||||
subx %g0, -1, %o0
|
||||
.size pmix_atomic_cmpset_rel_32, .-pmix_atomic_cmpset_rel_32
|
||||
|
||||
|
||||
.globl pmix_atomic_cmpset_64
|
||||
.type pmix_atomic_cmpset_64, #function
|
||||
pmix_atomic_cmpset_64:
|
||||
!#PROLOGUE# 0
|
||||
!#PROLOGUE# 1
|
||||
casxa [%o0] 0x80, %o1, %o2
|
||||
mov 0, %o0
|
||||
xor %o2, %o1, %o2
|
||||
retl
|
||||
movre %o2, 1, %o0
|
||||
.size pmix_atomic_cmpset_64, .-pmix_atomic_cmpset_64
|
||||
|
||||
|
||||
.globl pmix_atomic_cmpset_acq_64
|
||||
.type pmix_atomic_cmpset_acq_64, #function
|
||||
pmix_atomic_cmpset_acq_64:
|
||||
!#PROLOGUE# 0
|
||||
!#PROLOGUE# 1
|
||||
casxa [%o0] 0x80, %o1, %o2
|
||||
mov 0, %o0
|
||||
xor %o2, %o1, %o2
|
||||
movre %o2, 1, %o0
|
||||
membar #LoadLoad
|
||||
retl
|
||||
sra %o0, 0, %o0
|
||||
.size pmix_atomic_cmpset_acq_64, .-pmix_atomic_cmpset_acq_64
|
||||
|
||||
|
||||
.globl pmix_atomic_cmpset_rel_64
|
||||
.type pmix_atomic_cmpset_rel_64, #function
|
||||
pmix_atomic_cmpset_rel_64:
|
||||
!#PROLOGUE# 0
|
||||
!#PROLOGUE# 1
|
||||
membar #StoreStore
|
||||
casxa [%o0] 0x80, %o1, %o2
|
||||
mov 0, %o0
|
||||
xor %o2, %o1, %o2
|
||||
retl
|
||||
movre %o2, 1, %o0
|
||||
.size pmix_atomic_cmpset_rel_64, .-pmix_atomic_cmpset_rel_64
|
||||
|
||||
|
||||
.globl pmix_sys_timer_get_cycles
|
||||
.type pmix_sys_timer_get_cycles, #function
|
||||
pmix_sys_timer_get_cycles:
|
||||
save %sp,-176,%sp
|
||||
rd %tick,%o0
|
||||
ret ! Result = %i0
|
||||
restore %o0,0,%o0
|
||||
.size pmix_sys_timer_get_cycles, .-pmix_sys_timer_get_cycles
|
@ -1,63 +0,0 @@
|
||||
.text
|
||||
|
||||
.globl pmix_atomic_mb
|
||||
.type pmix_atomic_mb, @function
|
||||
pmix_atomic_mb:
|
||||
pushq %rbp
|
||||
movq %rsp, %rbp
|
||||
leave
|
||||
ret
|
||||
.size pmix_atomic_mb, .-pmix_atomic_mb
|
||||
|
||||
|
||||
.globl pmix_atomic_rmb
|
||||
.type pmix_atomic_rmb, @function
|
||||
pmix_atomic_rmb:
|
||||
pushq %rbp
|
||||
movq %rsp, %rbp
|
||||
leave
|
||||
ret
|
||||
.size pmix_atomic_rmb, .-pmix_atomic_rmb
|
||||
|
||||
|
||||
.globl pmix_atomic_wmb
|
||||
.type pmix_atomic_wmb, @function
|
||||
pmix_atomic_wmb:
|
||||
pushq %rbp
|
||||
movq %rsp, %rbp
|
||||
leave
|
||||
ret
|
||||
.size pmix_atomic_wmb, .-pmix_atomic_wmb
|
||||
|
||||
|
||||
.globl pmix_atomic_cmpset_32
|
||||
.type pmix_atomic_cmpset_32, @function
|
||||
pmix_atomic_cmpset_32:
|
||||
movl %esi, %eax
|
||||
lock; cmpxchgl %edx,(%rdi)
|
||||
sete %dl
|
||||
movzbl %dl, %eax
|
||||
ret
|
||||
.size pmix_atomic_cmpset_32, .-pmix_atomic_cmpset_32
|
||||
|
||||
|
||||
.globl pmix_atomic_cmpset_64
|
||||
.type pmix_atomic_cmpset_64, @function
|
||||
pmix_atomic_cmpset_64:
|
||||
movq %rsi, %rax
|
||||
lock; cmpxchgq %rdx,(%rdi)
|
||||
sete %dl
|
||||
movzbl %dl, %eax
|
||||
ret
|
||||
.size pmix_atomic_cmpset_64, .-pmix_atomic_cmpset_64
|
||||
|
||||
|
||||
.globl pmix_sys_timer_get_cycles
|
||||
.type pmix_sys_timer_get_cycles, @function
|
||||
pmix_sys_timer_get_cycles:
|
||||
rdtsc
|
||||
salq $32, %rdx
|
||||
mov %eax, %eax
|
||||
orq %rdx, %rax
|
||||
ret
|
||||
.size pmix_sys_timer_get_cycles, .-pmix_sys_timer_get_cycles
|
@ -1,65 +0,0 @@
|
||||
.text
|
||||
|
||||
.globl pmix_atomic_mb
|
||||
.type pmix_atomic_mb, @function
|
||||
pmix_atomic_mb:
|
||||
pushq %rbp
|
||||
movq %rsp, %rbp
|
||||
leave
|
||||
ret
|
||||
.size pmix_atomic_mb, .-pmix_atomic_mb
|
||||
|
||||
|
||||
.globl pmix_atomic_rmb
|
||||
.type pmix_atomic_rmb, @function
|
||||
pmix_atomic_rmb:
|
||||
pushq %rbp
|
||||
movq %rsp, %rbp
|
||||
leave
|
||||
ret
|
||||
.size pmix_atomic_rmb, .-pmix_atomic_rmb
|
||||
|
||||
|
||||
.globl pmix_atomic_wmb
|
||||
.type pmix_atomic_wmb, @function
|
||||
pmix_atomic_wmb:
|
||||
pushq %rbp
|
||||
movq %rsp, %rbp
|
||||
leave
|
||||
ret
|
||||
.size pmix_atomic_wmb, .-pmix_atomic_wmb
|
||||
|
||||
|
||||
.globl pmix_atomic_cmpset_32
|
||||
.type pmix_atomic_cmpset_32, @function
|
||||
pmix_atomic_cmpset_32:
|
||||
movl %esi, %eax
|
||||
lock; cmpxchgl %edx,(%rdi)
|
||||
sete %dl
|
||||
movzbl %dl, %eax
|
||||
ret
|
||||
.size pmix_atomic_cmpset_32, .-pmix_atomic_cmpset_32
|
||||
|
||||
|
||||
.globl pmix_atomic_cmpset_64
|
||||
.type pmix_atomic_cmpset_64, @function
|
||||
pmix_atomic_cmpset_64:
|
||||
movq %rsi, %rax
|
||||
lock; cmpxchgq %rdx,(%rdi)
|
||||
sete %dl
|
||||
movzbl %dl, %eax
|
||||
ret
|
||||
.size pmix_atomic_cmpset_64, .-pmix_atomic_cmpset_64
|
||||
|
||||
|
||||
.globl pmix_sys_timer_get_cycles
|
||||
.type pmix_sys_timer_get_cycles, @function
|
||||
pmix_sys_timer_get_cycles:
|
||||
rdtsc
|
||||
salq $32, %rdx
|
||||
mov %eax, %eax
|
||||
orq %rdx, %rax
|
||||
ret
|
||||
.size pmix_sys_timer_get_cycles, .-pmix_sys_timer_get_cycles
|
||||
|
||||
.section .note.GNU-stack,"",@progbits
|
@ -62,10 +62,6 @@
|
||||
#ifdef PMIX_DISABLE_INLINE_ASM
|
||||
#undef PMIX_C_GCC_INLINE_ASSEMBLY
|
||||
#define PMIX_C_GCC_INLINE_ASSEMBLY 0
|
||||
#undef PMIX_C_DEC_INLINE_ASSEMBLY
|
||||
#define PMIX_C_DEC_INLINE_ASSEMBLY 0
|
||||
#undef PMIX_C_XLC_INLINE_ASSEMBLY
|
||||
#define PMIX_C_XLC_INLINE_ASSEMBLY 0
|
||||
#endif
|
||||
|
||||
/* define PMIX_{GCC,DEC,XLC}_INLINE_ASSEMBLY based on the
|
||||
@ -74,12 +70,8 @@
|
||||
#if defined(c_plusplus) || defined(__cplusplus)
|
||||
/* We no longer support inline assembly for C++ as PMIX is a C-only interface */
|
||||
#define PMIX_GCC_INLINE_ASSEMBLY 0
|
||||
#define PMIX_DEC_INLINE_ASSEMBLY 0
|
||||
#define PMIX_XLC_INLINE_ASSEMBLY 0
|
||||
#else
|
||||
#define PMIX_GCC_INLINE_ASSEMBLY PMIX_C_GCC_INLINE_ASSEMBLY
|
||||
#define PMIX_DEC_INLINE_ASSEMBLY PMIX_C_DEC_INLINE_ASSEMBLY
|
||||
#define PMIX_XLC_INLINE_ASSEMBLY PMIX_C_XLC_INLINE_ASSEMBLY
|
||||
#endif
|
||||
|
||||
|
||||
|
@ -43,16 +43,6 @@
|
||||
#ifdef PMIX_DISABLE_INLINE_ASM
|
||||
#undef PMIX_C_GCC_INLINE_ASSEMBLY
|
||||
#define PMIX_C_GCC_INLINE_ASSEMBLY 0
|
||||
#undef PMIX_CXX_GCC_INLINE_ASSEMBLY
|
||||
#define PMIX_CXX_GCC_INLINE_ASSEMBLY 0
|
||||
#undef PMIX_C_DEC_INLINE_ASSEMBLY
|
||||
#define PMIX_C_DEC_INLINE_ASSEMBLY 0
|
||||
#undef PMIX_CXX_DEC_INLINE_ASSEMBLY
|
||||
#define PMIX_CXX_DEC_INLINE_ASSEMBLY 0
|
||||
#undef PMIX_C_XLC_INLINE_ASSEMBLY
|
||||
#define PMIX_C_XLC_INLINE_ASSEMBLY 0
|
||||
#undef PMIX_CXX_XLC_INLINE_ASSEMBLY
|
||||
#define PMIX_CXX_XLC_INLINE_ASSEMBLY 0
|
||||
#endif
|
||||
|
||||
/* define PMIX_{GCC,DEC,XLC}_INLINE_ASSEMBLY based on the
|
||||
@ -60,12 +50,8 @@
|
||||
are in C or C++ */
|
||||
#if defined(c_plusplus) || defined(__cplusplus)
|
||||
#define PMIX_GCC_INLINE_ASSEMBLY PMIX_CXX_GCC_INLINE_ASSEMBLY
|
||||
#define PMIX_DEC_INLINE_ASSEMBLY PMIX_CXX_DEC_INLINE_ASSEMBLY
|
||||
#define PMIX_XLC_INLINE_ASSEMBLY PMIX_CXX_XLC_INLINE_ASSEMBLY
|
||||
#else
|
||||
#define PMIX_GCC_INLINE_ASSEMBLY PMIX_C_GCC_INLINE_ASSEMBLY
|
||||
#define PMIX_DEC_INLINE_ASSEMBLY PMIX_C_DEC_INLINE_ASSEMBLY
|
||||
#define PMIX_XLC_INLINE_ASSEMBLY PMIX_C_XLC_INLINE_ASSEMBLY
|
||||
#endif
|
||||
|
||||
/**********************************************************************
|
||||
|
@ -121,6 +121,7 @@
|
||||
#define PMIX_OBJECT_H
|
||||
|
||||
#include <src/include/pmix_config.h>
|
||||
#include <pmix_common.h>
|
||||
|
||||
#include <assert.h>
|
||||
#ifdef HAVE_STDLIB_H
|
||||
|
@ -325,12 +325,6 @@
|
||||
# define __pmix_attribute_unused__
|
||||
#endif
|
||||
|
||||
#if PMIX_HAVE_ATTRIBUTE_VISIBILITY
|
||||
# define __pmix_attribute_visibility__(a) __attribute__((__visibility__(a)))
|
||||
#else
|
||||
# define __pmix_attribute_visibility__(a)
|
||||
#endif
|
||||
|
||||
#if PMIX_HAVE_ATTRIBUTE_WARN_UNUSED_RESULT
|
||||
# define __pmix_attribute_warn_unused_result__ __attribute__((__warn_unused_result__))
|
||||
#else
|
||||
@ -343,16 +337,6 @@
|
||||
# define __pmix_attribute_destructor__
|
||||
#endif
|
||||
|
||||
#ifdef PMIX_C_HAVE_VISIBILITY
|
||||
# if PMIX_C_HAVE_VISIBILITY
|
||||
# define PMIX_EXPORT __pmix_attribute_visibility__("default")
|
||||
# else
|
||||
# define PMIX_EXPORT
|
||||
# endif
|
||||
#else
|
||||
# define PMIX_EXPORT
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Do we have <stdint.h>?
|
||||
*/
|
||||
|
@ -212,7 +212,6 @@ int pmix_mca_base_component_repository_add (const char *path)
|
||||
return PMIX_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Initialize the repository
|
||||
*/
|
||||
|
@ -216,12 +216,12 @@ static void parse_verbose(char *e, pmix_output_stream_t *lds)
|
||||
have_output = true;
|
||||
}
|
||||
|
||||
else if (strcasecmp(ptr, "file") == 0) {
|
||||
else if (strcasecmp(ptr, "file") == 0 || strcasecmp(ptr, "file:") == 0) {
|
||||
lds->lds_want_file = true;
|
||||
have_output = true;
|
||||
} else if (strncasecmp(ptr, "file:", 5) == 0) {
|
||||
lds->lds_want_file = true;
|
||||
lds->lds_file_suffix = ptr + 5;
|
||||
lds->lds_file_suffix = strdup(ptr + 5);
|
||||
have_output = true;
|
||||
} else if (strcasecmp(ptr, "fileappend") == 0) {
|
||||
lds->lds_want_file = true;
|
||||
|
@ -24,6 +24,8 @@
|
||||
|
||||
#include "src/mca/mca.h"
|
||||
#include "src/mca/base/base.h"
|
||||
#include "src/util/error.h"
|
||||
#include "src/util/show_help.h"
|
||||
|
||||
#include "src/mca/bfrops/base/base.h"
|
||||
|
||||
@ -108,6 +110,12 @@ int pmix_bfrop_base_select(void)
|
||||
}
|
||||
}
|
||||
|
||||
/* if no modules were found, then that's an error as we require at least one */
|
||||
if (0 == pmix_list_get_size(&pmix_bfrops_globals.actives)) {
|
||||
pmix_show_help("help-pmix-runtime.txt", "no-plugins", true, "BFROPS");
|
||||
return PMIX_ERR_SILENT;
|
||||
}
|
||||
|
||||
if (4 < pmix_output_get_verbosity(pmix_bfrops_base_framework.framework_output)) {
|
||||
pmix_output(0, "Final Bfrop priorities");
|
||||
/* show the prioritized list */
|
||||
|
@ -23,6 +23,8 @@
|
||||
#include <string.h>
|
||||
|
||||
#include "src/util/argv.h"
|
||||
#include "src/util/error.h"
|
||||
#include "src/util/show_help.h"
|
||||
#include "src/mca/mca.h"
|
||||
#include "src/mca/base/base.h"
|
||||
|
||||
@ -106,6 +108,12 @@ int pmix_gds_base_select(pmix_info_t info[], size_t ninfo)
|
||||
}
|
||||
}
|
||||
|
||||
/* if no modules were found, then that's an error as we require at least one */
|
||||
if (0 == pmix_list_get_size(&pmix_gds_globals.actives)) {
|
||||
pmix_show_help("help-pmix-runtime.txt", "no-plugins", true, "GDS");
|
||||
return PMIX_ERR_SILENT;
|
||||
}
|
||||
|
||||
/* setup the list of all module names */
|
||||
PMIX_LIST_FOREACH(mod, &pmix_gds_globals.actives, pmix_gds_base_active_module_t) {
|
||||
pmix_argv_append_nosize(&mods, mod->module->name);
|
||||
|
@ -23,8 +23,6 @@
|
||||
# $HEADER$
|
||||
#
|
||||
|
||||
AM_CPPFLAGS = $(gds_ds12_CPPFLAGS)
|
||||
|
||||
headers = \
|
||||
gds_dstore.h
|
||||
|
||||
@ -51,10 +49,8 @@ endif
|
||||
mcacomponentdir = $(pmixlibdir)
|
||||
mcacomponent_LTLIBRARIES = $(component)
|
||||
mca_gds_ds12_la_SOURCES = $(component_sources)
|
||||
mca_gds_ds12_la_LIBADD = $(gds_ds12_LIBS)
|
||||
mca_gds_ds12_la_LDFLAGS = -module -avoid-version $(gds_ds12_LDFLAGS)
|
||||
mca_gds_ds12_la_LDFLAGS = -module -avoid-version
|
||||
|
||||
noinst_LTLIBRARIES = $(lib)
|
||||
libmca_gds_ds12_la_SOURCES = $(lib_sources)
|
||||
libmca_gds_ds12_la_LIBADD = $(gds_dstore_LIBS)
|
||||
libmca_gds_ds12_la_LDFLAGS = -module -avoid-version $(gds_ds12_LDFLAGS)
|
||||
libmca_gds_ds12_la_LDFLAGS = -module -avoid-version
|
||||
|
@ -1,20 +0,0 @@
|
||||
# -*- shell-script -*-
|
||||
#
|
||||
# Copyright (c) 2015-2017 Intel, Inc. All rights reserved.
|
||||
# Copyright (c) 2015 Research Organization for Information Science
|
||||
# and Technology (RIST). All rights reserved.
|
||||
# $COPYRIGHT$
|
||||
#
|
||||
# Additional copyrights may follow
|
||||
#
|
||||
# $HEADER$
|
||||
#
|
||||
|
||||
# MCA_gds_ds12_CONFIG([action-if-found], [action-if-not-found])
|
||||
# --------------------------------------------------------------------
|
||||
AC_DEFUN([MCA_pmix_gds_ds12_CONFIG],[
|
||||
AC_CONFIG_FILES([src/mca/gds/ds12/Makefile])
|
||||
|
||||
AS_IF([test "$enable_dstore" == "yes"], [$1], [$2])
|
||||
|
||||
])dnl
|
@ -835,7 +835,6 @@ static inline ns_map_data_t * _esh_session_map_search_client(const char *nspace)
|
||||
|
||||
static inline int _esh_session_init(size_t idx, ns_map_data_t *m, size_t jobuid, int setjobuid)
|
||||
{
|
||||
struct stat st = {0};
|
||||
seg_desc_t *seg = NULL;
|
||||
session_t *s = &(PMIX_VALUE_ARRAY_GET_ITEM(_session_array, session_t, idx));
|
||||
pmix_status_t rc = PMIX_SUCCESS;
|
||||
@ -856,8 +855,10 @@ static inline int _esh_session_init(size_t idx, ns_map_data_t *m, size_t jobuid,
|
||||
"%s:%d:%s _lockfile_name: %s", __FILE__, __LINE__, __func__, s->lockfile));
|
||||
|
||||
if (PMIX_PROC_SERVER == pmix_globals.proc_type) {
|
||||
if (stat(s->nspace_path, &st) == -1){
|
||||
if (0 != mkdir(s->nspace_path, 0770)) {
|
||||
if (0 != mkdir(s->nspace_path, 0770)) {
|
||||
if (EEXIST != errno) {
|
||||
pmix_output(0, "session init: can not create session directory \"%s\": %s",
|
||||
s->nspace_path, strerror(errno));
|
||||
rc = PMIX_ERROR;
|
||||
PMIX_ERROR_LOG(rc);
|
||||
return rc;
|
||||
@ -1937,7 +1938,6 @@ static pmix_status_t dstore_init(pmix_info_t info[], size_t ninfo)
|
||||
size_t n;
|
||||
char *dstor_tmpdir = NULL;
|
||||
size_t tbl_idx;
|
||||
struct stat st = {0};
|
||||
ns_map_data_t *ns_map = NULL;
|
||||
|
||||
pmix_output_verbose(2, pmix_gds_base_framework.framework_output,
|
||||
@ -2043,9 +2043,9 @@ static pmix_status_t dstore_init(pmix_info_t info[], size_t ninfo)
|
||||
goto err_exit;
|
||||
}
|
||||
|
||||
if (0 > stat(_base_path, &st)){
|
||||
if (0 > mkdir(_base_path, 0770)) {
|
||||
rc = PMIX_ERR_NO_PERMISSIONS;
|
||||
if (0 != mkdir(_base_path, 0770)) {
|
||||
if (EEXIST != errno) {
|
||||
rc = PMIX_ERROR;
|
||||
PMIX_ERROR_LOG(rc);
|
||||
goto err_exit;
|
||||
}
|
||||
@ -2304,8 +2304,10 @@ inline pmix_status_t _dstore_fetch(const char *nspace, pmix_rank_t rank, const c
|
||||
return rc;
|
||||
}
|
||||
|
||||
if (kvs) {
|
||||
*kvs = NULL;
|
||||
if (NULL == kvs) {
|
||||
rc = PMIX_ERR_FATAL;
|
||||
PMIX_ERROR_LOG(rc);
|
||||
return rc;
|
||||
}
|
||||
|
||||
if (PMIX_RANK_UNDEF == rank) {
|
||||
@ -2396,11 +2398,12 @@ inline pmix_status_t _dstore_fetch(const char *nspace, pmix_rank_t rank, const c
|
||||
kval_cnt = rinfo->count;
|
||||
|
||||
/* Initialize array for all keys of rank */
|
||||
if ((NULL == key) || (kval_cnt > 0)) {
|
||||
if ((NULL == key) && (kval_cnt > 0)) {
|
||||
kval = (pmix_value_t*)malloc(sizeof(pmix_value_t));
|
||||
if (NULL == kval) {
|
||||
return PMIX_ERR_NOMEM;
|
||||
}
|
||||
PMIX_VALUE_CONSTRUCT(kval);
|
||||
|
||||
ninfo = kval_cnt;
|
||||
PMIX_INFO_CREATE(info, ninfo);
|
||||
@ -2409,7 +2412,6 @@ inline pmix_status_t _dstore_fetch(const char *nspace, pmix_rank_t rank, const c
|
||||
goto done;
|
||||
}
|
||||
|
||||
PMIX_VALUE_CONSTRUCT(kval);
|
||||
kval->type = PMIX_DATA_ARRAY;
|
||||
kval->data.darray = (pmix_data_array_t*)malloc(sizeof(pmix_data_array_t));
|
||||
if (NULL == kval->data.darray) {
|
||||
@ -2543,10 +2545,11 @@ done:
|
||||
}
|
||||
|
||||
if( rc != PMIX_SUCCESS ){
|
||||
if( NULL == key ) {
|
||||
if ((NULL == key) && (kval_cnt > 0)) {
|
||||
if( NULL != info ) {
|
||||
PMIX_INFO_FREE(info, ninfo);
|
||||
}
|
||||
PMIX_VALUE_RELEASE(kval);
|
||||
}
|
||||
return rc;
|
||||
}
|
||||
|
@ -21,7 +21,7 @@
|
||||
BEGIN_C_DECLS
|
||||
|
||||
/*
|
||||
* Most of this file is just for ompi_info. The only public interface
|
||||
* Most of this file is just for pmix_info. The only public interface
|
||||
* once pmix_init has been called is the pmix_pinstall_dirs structure
|
||||
* and the pmix_pinstall_dirs_expand() call */
|
||||
struct pmix_pinstall_dirs_t {
|
||||
@ -40,18 +40,9 @@ struct pmix_pinstall_dirs_t {
|
||||
char* infodir;
|
||||
char* mandir;
|
||||
|
||||
/* Note that the following fields intentionally have an "ompi"
|
||||
prefix, even though they're down in the PMIX layer. This is
|
||||
not abstraction break because the "ompi" they're referring to
|
||||
is for the build system of the overall software tree -- not an
|
||||
individual project within that overall tree.
|
||||
|
||||
Rather than using pkg{data,lib,includedir}, use our own
|
||||
ompi{data,lib,includedir}, which is always set to
|
||||
{datadir,libdir,includedir}/pmix. This will keep us from
|
||||
having help files in prefix/share/open-rte when building
|
||||
without PMIX, but in prefix/share/pmix when building
|
||||
with PMIX.
|
||||
/* Rather than using pkg{data,lib,includedir}, use our own
|
||||
pmix{data,lib,includedir}, which is always set to
|
||||
{datadir,libdir,includedir}/pmix.
|
||||
|
||||
Note that these field names match macros set by configure that
|
||||
are used in Makefile.am files. E.g., project help files are
|
||||
|
@ -24,6 +24,8 @@
|
||||
|
||||
#include "src/mca/mca.h"
|
||||
#include "src/mca/base/base.h"
|
||||
#include "src/util/error.h"
|
||||
#include "src/util/show_help.h"
|
||||
|
||||
#include "src/mca/preg/base/base.h"
|
||||
|
||||
@ -100,6 +102,12 @@ int pmix_preg_base_select(void)
|
||||
}
|
||||
}
|
||||
|
||||
/* if no modules were found, then that's an error as we require at least one */
|
||||
if (0 == pmix_list_get_size(&pmix_preg_globals.actives)) {
|
||||
pmix_show_help("help-pmix-runtime.txt", "no-plugins", true, "PREG");
|
||||
return PMIX_ERR_SILENT;
|
||||
}
|
||||
|
||||
if (4 < pmix_output_get_verbosity(pmix_preg_base_framework.framework_output)) {
|
||||
pmix_output(0, "Final preg priorities");
|
||||
/* show the prioritized list */
|
||||
|
@ -24,6 +24,8 @@
|
||||
|
||||
#include "src/mca/mca.h"
|
||||
#include "src/mca/base/base.h"
|
||||
#include "src/util/error.h"
|
||||
#include "src/util/show_help.h"
|
||||
|
||||
#include "src/mca/psec/base/base.h"
|
||||
|
||||
@ -100,6 +102,12 @@ int pmix_psec_base_select(void)
|
||||
}
|
||||
}
|
||||
|
||||
/* if no modules were found, then that's an error as we require at least one */
|
||||
if (0 == pmix_list_get_size(&pmix_psec_globals.actives)) {
|
||||
pmix_show_help("help-pmix-runtime.txt", "no-plugins", true, "PSEC");
|
||||
return PMIX_ERR_SILENT;
|
||||
}
|
||||
|
||||
if (4 < pmix_output_get_verbosity(pmix_psec_base_framework.framework_output)) {
|
||||
pmix_output(0, "Final psec priorities");
|
||||
/* show the prioritized list */
|
||||
|
@ -24,6 +24,8 @@
|
||||
|
||||
#include "src/mca/mca.h"
|
||||
#include "src/mca/base/base.h"
|
||||
#include "src/util/error.h"
|
||||
#include "src/util/show_help.h"
|
||||
|
||||
#include "src/mca/ptl/base/base.h"
|
||||
|
||||
@ -81,6 +83,12 @@ int pmix_ptl_base_select(void)
|
||||
}
|
||||
}
|
||||
|
||||
/* if no modules were found, then that's an error as we require at least one */
|
||||
if (0 == pmix_list_get_size(&pmix_ptl_globals.actives)) {
|
||||
pmix_show_help("help-pmix-runtime.txt", "no-plugins", true, "PTL");
|
||||
return PMIX_ERR_SILENT;
|
||||
}
|
||||
|
||||
if (4 < pmix_output_get_verbosity(pmix_ptl_base_framework.framework_output)) {
|
||||
pmix_output(0, "Final PTL priorities");
|
||||
/* show the prioritized list */
|
||||
|
@ -40,3 +40,21 @@ a fatal situation, but may negatively impact your launch performance.
|
||||
If you feel you have received this warning in error, or wish to ignore
|
||||
it in the future, you can disable it by setting the PMIx MCA parameter
|
||||
"pmix_suppress_missing_data_warning=1"
|
||||
#
|
||||
[no-plugins]
|
||||
We were unable to find any usable plugins for the %s framework. This PMIx
|
||||
framework requires at least one plugin in order to operate. This can be caused
|
||||
by any of the following:
|
||||
|
||||
* we were unable to build any of the plugins due to some combination
|
||||
of configure directives and available system support
|
||||
|
||||
* no plugin was selected due to some combination of MCA parameter
|
||||
directives versus built plugins (i.e., you excluded all the plugins
|
||||
that were built and/or could execute)
|
||||
|
||||
* the PMIX_INSTALL_PREFIX environment variable, or the MCA parameter
|
||||
"mca_base_component_path", is set and doesn't point to any location
|
||||
that includes at least one usable plugin for this framework.
|
||||
|
||||
Please check your installation and environment.
|
||||
|
@ -285,9 +285,11 @@ int pmix_rte_init(pmix_proc_type_t type,
|
||||
|
||||
return PMIX_SUCCESS;
|
||||
|
||||
return_error:
|
||||
pmix_show_help( "help-pmix-runtime.txt",
|
||||
"pmix_init:startup:internal-failure", true,
|
||||
error, ret );
|
||||
return_error:
|
||||
if (PMIX_ERR_SILENT != ret) {
|
||||
pmix_show_help( "help-pmix-runtime.txt",
|
||||
"pmix_init:startup:internal-failure", true,
|
||||
error, ret );
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
@ -293,7 +293,6 @@ pmix_status_t pmix_server_get(pmix_buffer_t *buf,
|
||||
PMIX_GDS_ASSEMB_KVS_REQ(rc, peer, &proc, &cb.kvs, &pkt, cd);
|
||||
if (PMIX_SUCCESS != rc) {
|
||||
PMIX_ERROR_LOG(rc);
|
||||
PMIX_DESTRUCT(&pbkt);
|
||||
PMIX_DESTRUCT(&cb);
|
||||
return rc;
|
||||
}
|
||||
|
@ -14,6 +14,7 @@
|
||||
#define PMIX_ALFG_H
|
||||
|
||||
#include <src/include/pmix_config.h>
|
||||
#include <pmix_common.h>
|
||||
|
||||
#include "src/include/pmix_stdint.h"
|
||||
|
||||
|
@ -27,7 +27,7 @@
|
||||
#define PMIX_BASENAME_H
|
||||
|
||||
#include <src/include/pmix_config.h>
|
||||
|
||||
#include <pmix_common.h>
|
||||
|
||||
BEGIN_C_DECLS
|
||||
|
||||
|
@ -43,7 +43,7 @@
|
||||
#define PMIX_OS_PATH_H
|
||||
|
||||
#include <src/include/pmix_config.h>
|
||||
|
||||
#include <pmix_common.h>
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdarg.h>
|
||||
|
@ -86,6 +86,7 @@ typedef struct {
|
||||
* Private functions
|
||||
*/
|
||||
static void construct(pmix_object_t *stream);
|
||||
static void destruct(pmix_object_t *stream);
|
||||
static int do_open(int output_id, pmix_output_stream_t * lds);
|
||||
static int open_file(int i);
|
||||
static void free_descriptor(int output_id);
|
||||
@ -116,7 +117,7 @@ static bool syslog_opened = false;
|
||||
#endif
|
||||
static char *redirect_syslog_ident = NULL;
|
||||
|
||||
PMIX_CLASS_INSTANCE(pmix_output_stream_t, pmix_object_t, construct, NULL);
|
||||
PMIX_CLASS_INSTANCE(pmix_output_stream_t, pmix_object_t, construct, destruct);
|
||||
|
||||
/*
|
||||
* Setup the output stream infrastructure
|
||||
@ -481,6 +482,15 @@ static void construct(pmix_object_t *obj)
|
||||
stream->lds_want_file_append = false;
|
||||
stream->lds_file_suffix = NULL;
|
||||
}
|
||||
static void destruct(pmix_object_t *obj)
|
||||
{
|
||||
pmix_output_stream_t *stream = (pmix_output_stream_t*) obj;
|
||||
|
||||
if( NULL != stream->lds_file_suffix ) {
|
||||
free(stream->lds_file_suffix);
|
||||
stream->lds_file_suffix = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Back-end of open() and reopen().
|
||||
|
@ -26,7 +26,7 @@
|
||||
#define PMIX_PRINTF_H
|
||||
|
||||
#include <src/include/pmix_config.h>
|
||||
|
||||
#include <pmix_common.h>
|
||||
|
||||
#include <stdarg.h>
|
||||
#include <stdlib.h>
|
||||
|
@ -91,6 +91,7 @@
|
||||
#define PMIX_SHOW_HELP_H
|
||||
|
||||
#include <src/include/pmix_config.h>
|
||||
#include <pmix_common.h>
|
||||
|
||||
#include <stdarg.h>
|
||||
|
||||
|
@ -37,6 +37,12 @@
|
||||
|
||||
BEGIN_C_DECLS
|
||||
|
||||
#ifdef OPAL_C_HAVE_VISIBILITY
|
||||
#define PMIX_HAVE_VISIBILITY 1
|
||||
#else
|
||||
#undef PMIX_HAVE_VISIBILITY
|
||||
#endif
|
||||
|
||||
typedef struct {
|
||||
opal_pmix_base_component_t super;
|
||||
opal_list_t jobids;
|
||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user