diff --git a/ARP_CSFR/.gitignore b/ARP_CSFR/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..63470a9bd645cf6cfe743cd90cda02c294020627
--- /dev/null
+++ b/ARP_CSFR/.gitignore
@@ -0,0 +1,39 @@
+# Compiled Object files
+*.slo
+*.lo
+*.o
+*.obj
+
+# Precompiled Headers
+*.gch
+*.pch
+
+# Compiled Dynamic libraries
+*.so
+*.dylib
+*.dll
+
+# Fortran module files
+*.mod
+
+# Compiled Static libraries
+*.lai
+*.la
+*.a
+*.lib
+
+# Executables
+*.exe
+*.out
+*.app
+
+# Build directories
+compiler-plugin/plugin_build/
+runtime/build-all/
+
+# Temporary files
+*.swp
+*log.txt
+
+# Doxygen output
+runtime/html/
diff --git a/AUTHORS b/ARP_CSFR/AUTHORS
similarity index 100%
rename from AUTHORS
rename to ARP_CSFR/AUTHORS
diff --git a/COPYING b/ARP_CSFR/COPYING
similarity index 100%
rename from COPYING
rename to ARP_CSFR/COPYING
diff --git a/ARP_CSFR/README.md b/ARP_CSFR/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..d6c672d571ec9e6c69ed3f7a2533b34fa8e0b6a9
--- /dev/null
+++ b/ARP_CSFR/README.md
@@ -0,0 +1,151 @@
+# Atlas: Programming for Persistent Memory
+[](https://travis-ci.org/HewlettPackard/Atlas)
+
+Data in persistent memory survives certain tolerated events such as
+process termination, OS reboots/crashes, and power
+failures. Persistent memory is assumed to be directly accessible with
+CPU loads and stores. This kind of programming is relevant on new
+servers with NVDIMMs as well as future machines with
+non-volatile memory such as memristors or 3D XPoint. Atlas provides
+high level APIs that allow the programmer to persist data in a
+fault-tolerant manner and reuse it later on. Any program which has
+reusable data that can be exploited to achieve a faster restart or a
+restart from an intermediate program point is a candidate for this
+paradigm.
+
+A persistent memory allocator is provided for identifying data that
+should be preserved regardless of machine shutdowns or failures. By
+conforming to certain programming idioms and APIs, programmers can
+automatically obtain failure-resilience of persistent data. The
+programming model with implementation details can be found in the
+[OOPSLA 2014 paper on Atlas](http://dl.acm.org/citation.cfm?id=2660224).
+
+The current implementation supports
+POSIX threads but the implementation for C/C++11 threads should be similar.
+Linux tmpfs is currently used to simulate persistent
+memory. Hence, persistent data in this implementation survives process
+crashes but not OS shutdowns/panics and power failures. However, the
+APIs and the implementation are ready for all of the above
+failures. The intention is to allow programmers to write code in a
+programming style that is ready for upcoming persistent memory based
+systems.
+
+This software is currently experimental, see `COPYING` for license
+terms. Contributions and feedback are very welcome.
+
+## What is Included?
+
+APIs are provided for creation and management of persistent
+regions which are implemented on top of memory mapped files. Support
+for a persistent memory allocator is provided. In essence, a
+programmer is able to identify data structures that must be maintained
+in a persistent manner. The goal of Atlas is to ensure that persistent
+data are updated in a consistent manner regardless of failures.
+
+The current implementation has two primary components: a
+compiler-plugin and a runtime library. The programmer writes
+multithreaded code, possibly using locks for synchronization, and puts
+data in persistent regions as required. This code is passed through
+the plugin at compile-time that results in calls to the runtime
+library at appropriate program points. When this program is run,
+automatic failure-atomicity (all-or-nothing) of updates to persistent
+data structures is provided. If a failure occurs, recovery must be
+initiated to ensure that persistent data structures are consistent.
+
+## Persistent Region APIs
+
+A preview is provided here. See `runtime/include/atlas_alloc.h` for the
+actual interfaces.
+
+A programmer needs to create one or more named persistent regions,
+entities that hold everything persistent. The interface
+**_NVM_FindOrCreateRegion_** or a variant can be used for this purpose. If a
+region with the provided name exists, a handle to the region is
+returned. Otherwise a region is created and its handle is
+returned. Interfaces to close or delete a region are available.
+
+To populate a persistent region, memory must be dynamically allocated
+from that persistent region using **_nvm_alloc_** (or a variant) that has a
+malloc-style interface. The region identifier must be provided so as
+to identify the persistent region intended. An **_nvm_free_** is provided
+for deallocation purposes.
+
+Management of persistent regions and the contained data together
+identify the persistent objects used by a program. Care must be taken
+to ensure that all valid data within a persistent region is reachable
+from the persistent root of the region. Use the interface
+**_NVM_SetRegionRoot_** for this purpose.
+
+## Consistency APIs
+
+See `runtime/include/atlas_api.h` for the actual interfaces.
+
+Persistent data must be kept consistent regardless of failures. The
+programmer needs to call **_NVM_Initialize_** and **_NVM_Finalize_**
+to start and stop Atlas support. Additionally, Atlas needs to know
+code sections where program invariants are modified. If the program is
+multithreaded and written using locks for synchronization, Atlas
+automatically infers boundaries of regions where it must preserve
+failure-atomicity (all-or-nothing) of updates to persistent
+memory. Optionally, the programmer can demarcate sections of code with
+calls to **_nvm_begin_durable_** and **_nvm_end_durable_** to identify
+a durable or failure-atomic section of code. Note that no isolation
+among threads is provided by a durable section. In contrast, if
+persistent data is modified within a critical section, the critical
+section provides both isolation among threads and durability to
+persistent memory.
+
+## Restart Code
+
+A program might want to reuse data within a persistent region. For
+this purpose, after finding a region handle, use the interface
+**_NVM_GetRegionRoot_** to access the reachable data. Instead of
+starting from scratch, this data can be reused to essentially restart
+from where the region was left off the last time around.
+
+That's all, as far as Atlas APIs are concerned. Compared to a
+transient program, the idea is to write persistent memory programs
+with as few changes as possible.
+
+## Organization
+
+- The APIs for this model are in `runtime/include`. [API doc here](http://hewlettpackard.github.io/Atlas/runtime/doc/atlas__api_8h.html).
+- Instructions on how to build the compiler-plugin are in
+`compiler-plugin/README.md`.
+- Instructions on how to build the runtime are in `runtime/README.md`.
+- For example programs using Atlas, see `runtime/tests`.
+- The Atlas library sources are in `runtime/src`.
+
+## Dependencies
+
+* Currently, we support only x86-64 CPUs
+* We assume Linux OS. Linux tmpfs must be supported. Testing has been
+ done on RedHat and Ubuntu.
+* We assume modern C/C++ compilers in the build environment that must
+ support C/C++11.
+* The default compiler used in the build is clang. Testing has been
+ done with version 3.6.0 or later. The instrumentation support is
+ currently available only with clang/LLVM. The runtime should build
+ with any compiler supporting C/C++11 though clang is preferred for
+ uniformity purposes.
+* cmake version 3.1 or later
+* boost library
+* bash 4.0
+
+For Ubuntu 16.04, these dependencies can be installed with:
+
+ sudo apt-get install llvm clang cmake libboost-graph-dev
+
+* ruby (for certain test scripts), see **Installing Ruby** at [gorails](https://gorails.com/setup/ubuntu/16.04) for instructions.
+
+## Discuss
+Questions, feedback, comments are welcome on our public [mailing list](https://groups.google.com/forum/#!forum/atlas-discuss). Subscribe by using the Google Groups web interface or by sending an email with subject “subscribe” to atlas-discuss+subscribe [AT] googlegroups.com.
+
+
+## Reference
+
+Dhruva R. Chakrabarti, Hans-J. Boehm, and Kumud Bhandari. 2014.
+[Atlas: leveraging locks for non-volatile memory consistency](http://dl.acm.org/citation.cfm?id=2660224).
+In _Proceedings of the 2014 ACM International Conference on Object Oriented
+Programming Systems Languages & Applications_ (OOPSLA '14). ACM, New
+York, NY, USA, 433-452.
diff --git a/compiler-plugin/README.md b/ARP_CSFR/compiler-plugin/README.md
similarity index 100%
rename from compiler-plugin/README.md
rename to ARP_CSFR/compiler-plugin/README.md
diff --git a/compiler-plugin/build_plugin b/ARP_CSFR/compiler-plugin/build_plugin
similarity index 100%
rename from compiler-plugin/build_plugin
rename to ARP_CSFR/compiler-plugin/build_plugin
diff --git a/compiler-plugin/src/Instrumentation/NvmInstrumenter.cpp b/ARP_CSFR/compiler-plugin/src/Instrumentation/NvmInstrumenter.cpp
similarity index 100%
rename from compiler-plugin/src/Instrumentation/NvmInstrumenter.cpp
rename to ARP_CSFR/compiler-plugin/src/Instrumentation/NvmInstrumenter.cpp
diff --git a/compiler-plugin/test/README.md b/ARP_CSFR/compiler-plugin/test/README.md
similarity index 100%
rename from compiler-plugin/test/README.md
rename to ARP_CSFR/compiler-plugin/test/README.md
diff --git a/compiler-plugin/test/long_double.c b/ARP_CSFR/compiler-plugin/test/long_double.c
similarity index 100%
rename from compiler-plugin/test/long_double.c
rename to ARP_CSFR/compiler-plugin/test/long_double.c
diff --git a/compiler-plugin/test/store_int.c b/ARP_CSFR/compiler-plugin/test/store_int.c
similarity index 100%
rename from compiler-plugin/test/store_int.c
rename to ARP_CSFR/compiler-plugin/test/store_int.c
diff --git a/compiler-plugin/test/strops.c b/ARP_CSFR/compiler-plugin/test/strops.c
similarity index 100%
rename from compiler-plugin/test/strops.c
rename to ARP_CSFR/compiler-plugin/test/strops.c
diff --git a/compiler-plugin/test/test_instr b/ARP_CSFR/compiler-plugin/test/test_instr
similarity index 100%
rename from compiler-plugin/test/test_instr
rename to ARP_CSFR/compiler-plugin/test/test_instr
diff --git a/compiler-plugin/test/test_refs/long_double.ref b/ARP_CSFR/compiler-plugin/test/test_refs/long_double.ref
similarity index 100%
rename from compiler-plugin/test/test_refs/long_double.ref
rename to ARP_CSFR/compiler-plugin/test/test_refs/long_double.ref
diff --git a/compiler-plugin/test/test_refs/store_int.ref b/ARP_CSFR/compiler-plugin/test/test_refs/store_int.ref
similarity index 100%
rename from compiler-plugin/test/test_refs/store_int.ref
rename to ARP_CSFR/compiler-plugin/test/test_refs/store_int.ref
diff --git a/compiler-plugin/test/test_refs/strops.ref b/ARP_CSFR/compiler-plugin/test/test_refs/strops.ref
similarity index 100%
rename from compiler-plugin/test/test_refs/strops.ref
rename to ARP_CSFR/compiler-plugin/test/test_refs/strops.ref
diff --git a/ARP_CSFR/runtime/CMakeLists.txt b/ARP_CSFR/runtime/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..478ffadfbd0f09998392135ef124ee847b8cd1f8
--- /dev/null
+++ b/ARP_CSFR/runtime/CMakeLists.txt
@@ -0,0 +1,278 @@
+#
+# (c) Copyright 2016 Hewlett Packard Enterprise Development LP
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version. This program is
+# distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# for more details. You should have received a copy of the GNU Lesser
+# General Public License along with this program. If not, see
+# .
+#
+# Top level CMakeLists for Atlas project
+
+cmake_minimum_required (VERSION 3.1.0)
+
+project (Atlas)
+set (Atlas_VERSION_MAJOR 1)
+set (Atlas_VERSION_MINOR 0)
+
+if (CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR AND NOT MSVC_IDE)
+ message(FATAL_ERROR "In-source builds are not allowed.
+Please create a directory and run cmake from there, passing the path
+to this source directory as the last argument.
+This process created the file `CMakeCache.txt' and the directory `CMakeFiles'.
+Please delete them.")
+endif ()
+
+#need pthreads to build tests and tools - find an equivalent pthread compatible library on host
+set (THREADS_PREFER_PTHREAD_FLAG ON)
+find_package (Threads REQUIRED)
+link_libraries (Threads::Threads)
+
+#helper function used to build up relative file paths to files to be copied to build dir
+function (prepend_paths FILES TARGET_PATH)
+ set (LISTVAR "")
+ foreach (t ${ARGN})
+ list (APPEND LISTVAR "${TARGET_PATH}/${t}")
+ endforeach (t)
+ set (${FILES} "${LISTVAR}" PARENT_SCOPE)
+endfunction (prepend_paths)
+
+set (ATLAS_COPY_FILES ${ATLAS_COPY_FILES} README.md)
+
+set (ATLAS_INTERNAL_INCLUDES "src/internal_includes")
+set (ATLAS_INCLUDE_DIR "include")
+set (ATLAS_INCLUDE_FILES atlas_alloc.h atlas_api.h atlas_alloc_cpp.hpp)
+prepend_paths (ATLAS_INCLUDE_FILES ${ATLAS_INCLUDE_DIR} ${ATLAS_INCLUDE_FILES})
+set (ATLAS_COPY_FILES ${ATLAS_COPY_FILES} ${ATLAS_INCLUDE_FILES})
+
+set (ATLAS_TESTS_DIR "tests")
+set (ATLAS_TESTS_FILES run_quick_test)
+prepend_paths (ATLAS_TESTS_FILES ${ATLAS_TESTS_DIR} ${ATLAS_TESTS_FILES})
+set (ATLAS_COPY_FILES ${ATLAS_COPY_FILES} ${ATLAS_TESTS_FILES})
+
+set (ATLAS_TESTS_DATA_STRUCT_IN_DIR "${ATLAS_TESTS_DIR}/data_structures_inputs")
+set (ATLAS_TESTS_DATA_STRUCT_IN_FILES timing.txt cow_array_list_nvm.ref cow_array_list.ref queue_nvm.ref queue.ref
+ sll_ll.ref sll_nvm.ref sll.ref alarm_clock.ref alarm_clock_nvm.ref cow_array_list.in
+ cow_array_list_nvm.in queue_nvm.in queue.in sll.in sll_ll.in sll_nvm.in alarm_clock.in
+ alarm_clock_nvm.in stores.ref stores_nvm.ref stores.in stores_nvm.in)
+prepend_paths (ATLAS_TESTS_DATA_STRUCT_IN_FILES ${ATLAS_TESTS_DATA_STRUCT_IN_DIR} ${ATLAS_TESTS_DATA_STRUCT_IN_FILES})
+set (ATLAS_COPY_FILES ${ATLAS_COPY_FILES} ${ATLAS_TESTS_DATA_STRUCT_IN_FILES})
+
+set (ATLAS_CONSISTENCY_DIR "${ATLAS_TESTS_DIR}/consistency")
+set (ATLAS_CONSISTENCY_TESTS test_consistency)
+prepend_paths (ATLAS_CONSISTENCY_TESTS ${ATLAS_CONSISTENCY_DIR} ${ATLAS_CONSISTENCY_TESTS})
+set (ATLAS_COPY_FILES ${ATLAS_COPY_FILES} ${ATLAS_CONSISTENCY_TESTS})
+
+set (ATLAS_REGION_DIR "${ATLAS_TESTS_DIR}/region")
+set (ATLAS_REGION_TESTS test_region)
+prepend_paths (ATLAS_REGION_TESTS ${ATLAS_REGION_DIR} ${ATLAS_REGION_TESTS})
+set (ATLAS_COPY_FILES ${ATLAS_COPY_FILES} ${ATLAS_REGION_TESTS})
+
+set (ATLAS_PMALLOC_DIR "${ATLAS_TESTS_DIR}/pmalloc")
+set (ATLAS_PMALLOC_TESTS test_pmalloc)
+prepend_paths (ATLAS_PMALLOC_TESTS ${ATLAS_PMALLOC_DIR} ${ATLAS_PMALLOC_TESTS})
+set (ATLAS_COPY_FILES ${ATLAS_COPY_FILES} ${ATLAS_PMALLOC_TESTS})
+
+#default to debug build if no build type specified
+if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
+ message ("No build type specified, defaulting to debug")
+ set (CMAKE_BUILD_TYPE "Debug" CACHE STRING "Defaulted to debug build, none specified" FORCE)
+endif ()
+
+#use clang for everything
+set (CMAKE_C_COMPILER "clang")
+set (CMAKE_CXX_COMPILER "clang++")
+
+#set flags for using instrumentation
+
+set (INSTR $ENV{PLUGIN})
+if (INSTR)
+ message ("Found environment variable PLUGIN set to ${INSTR}")
+elseif (EXISTS "${CMAKE_SOURCE_DIR}/../compiler-plugin/plugin_build/NvmInstrumenter.so")
+ set (INSTR "${CMAKE_SOURCE_DIR}/../compiler-plugin/plugin_build/NvmInstrumenter.so")
+ message ("Found a compiler plugin build in ${INSTR}")
+else ()
+ message (FATAL_ERROR "Cannot find NvmInstrumenter.so, is it built in Atlas/compiler-plugin/plugin_build? If built outside of Atlas/compiler-plugin/plugin_build set environment variable PLUGIN to it's location.")
+endif ()
+set (NVM_INSTR_FLAGS "-Xclang -load -Xclang ${INSTR}")
+
+#debug settings
+set (CMAKE_C_FLAGS_DEBUG "-g3 -DDEBUG")
+set (CMAKE_CXX_FLAGS_DEBUG "-g3 -DDEBUG")
+
+#Defines required for building Atlas
+set (ATLAS_SPECIFIC_FLAGS "-DATLAS_ALLOC_DUMP -DATLAS_ALLOC_TRACE")
+
+#Cmake defines used to specify different targets for Atlas - must pass to cmake as -DVAR_NAME=true
+if (ALL_PERSISTENT)
+ message ("Configuring for all persistent")
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_ALL_PERSISTENT")
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_ALL_PERSISTENT")
+endif ()
+if (NVM_STATS)
+ message ("Configuring for nvm stats")
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DNVM_STATS")
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DNVM_STATS")
+endif ()
+if (FLC)
+ message ("Configuring for critical section level cache flush")
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_FLUSH_LOCAL_COMMIT")
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_FLUSH_LOCAL_COMMIT")
+endif ()
+if (FGC)
+ message ("Configuring for global consistent point cache flush")
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_FLUSH_GLOBAL_COMMIT")
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_FLUSH_GLOBAL_COMMIT")
+endif ()
+if (USE_TABLE_FLUSH)
+ message ("Configuring for table based flush")
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_USE_TABLE_FLUSH")
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_USE_TABLE_FLUSH")
+endif ()
+if (DISABLE_FLUSH)
+ message ("Configuring disabling all cache line flushes")
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DDISABLE_FLUSHES")
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DDISABLE_FLUSHES")
+endif ()
+if (DISABLE_HELPER)
+ message ("Configuring disabling helper")
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_DISABLE_HELPER")
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_DISABLE_HELPER")
+endif ()
+if (DISABLE_ALLOC_LOGGING)
+ message ("Configuring disabling alloc logging")
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_DISABLE_ALLOC_LOGGING")
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_DISABLE_ALLOC_LOGGING")
+endif ()
+if (DISABLE_LOG_FLUSH)
+ message ("Configuring disabling log flush")
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_DISABLE_LOG_FLUSH")
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_DISABLE_LOG_FLUSH")
+endif ()
+if (DISABLE_DATA_FLUSH)
+ message ("Configuring disabling data flush")
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_DISABLE_DATA_FLUSH")
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_DISABLE_DATA_FLUSH")
+endif ()
+if (PROFILE_HT)
+ message ("Configuring profile helper thread")
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_PROFILE_HT")
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_PROFILE_HT")
+endif ()
+if (USE_MOVNT)
+ message ("Configuring use movnt")
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_USE_MOVNT")
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_USE_MOVNT")
+endif ()
+if (NO_SFENCE)
+ message ("Configuring for movnt use with no sfence")
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_NO_SFENCE")
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_NO_SFENCE")
+endif ()
+if (LOG_FLUSH_OPT)
+ message ("Configuring to log flush optimization")
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_LOG_FLUSH_OPT")
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_LOG_FLUSH_OPT")
+endif ()
+if (LOG_WITH_NVM_ALLOC)
+ message ("Configuring to log with nvm alloc")
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_LOG_WITH_NVM_ALLOC")
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_LOG_WITH_NVM_ALLOC")
+endif ()
+if (LOG_WITH_MALLOC)
+ message ("Configuring to log with malloc")
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_LOG_WITH_MALLOC")
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_LOG_WITH_MALLOC")
+endif ()
+if (USE_MALLOC)
+ message ("Configuring to use malloc")
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_USE_MALLOC")
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_USE_MALLOC")
+endif ()
+if (OPT_UNIQ_LOC)
+ message ("Configuring to opt uniq loc")
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_OPT_UNIQ_LOC")
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_OPT_UNIQ_LOC")
+endif ()
+if (ALWAYS_LOG)
+ message ("Configuring to always log")
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_ALWAYS_LOG")
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_ALWAYS_LOG")
+endif ()
+if (ALWAYS_MAP)
+ message ("Configuring to always map")
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_ALWAYS_MAP")
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_ALWAYS_MAP")
+endif ()
+if (TRACE)
+ message ("Configuring to use trace")
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_NVM_TRACE")
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_NVM_TRACE")
+endif ()
+if (FORCE_FAIL)
+ message ("Configuring to perform process crash testing")
+ set (APP_FLAGS "-D_FORCE_FAIL")
+endif ()
+if (FAIL_ATLAS)
+ message ("Configuring atlas to fail internally")
+ set (ATLAS_SPECIFIC_FLAGS "${ATLAS_SPECIFIC_FLAGS} -D_FORCE_FAIL -rdynamic")
+endif ()
+if (VERBOSE_TRACE)
+ message ("Configuring for verbose trace")
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_NVM_VERBOSE_TRACE")
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_NVM_VERBOSE_TRACE")
+endif ()
+if (SRRF)
+ message ("Configuring for strong restart race freedom")
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_SRRF")
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_SRRF")
+endif ()
+if (NVDIMM_PROLIANT)
+ message ("Configuring for ProLiant NVDIMM")
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_NVDIMM_PROLIANT")
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_NVDIMM_PROLIANT")
+endif ()
+if (NO_NEST)
+ message ("Configuring for no nesting of critical sections")
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_NO_NEST")
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_NO_NEST")
+endif ()
+if (CONSISTENCY_FAIL)
+ message ("Setting consistency tests to fail")
+ set (CONSISTENCY_FAIL_FLAG "-DCONSISTENCY_FAIL")
+endif ()
+
+set(CMAKE_CXX_STANDARD 11)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+set(CMAKE_C_STANDARD 11)
+set(CMAKE_C_STANDARD_REQUIRED ON)
+set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -Wall -Wextra -pedantic -Wno-unused-parameter -Winline ${ATLAS_SPECIFIC_FLAGS}")
+set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O3 -Wall -Wextra -pedantic -Winline ${ATLAS_SPECIFIC_FLAGS}")
+
+#copy necessary files from the src dir to the build dir
+foreach (t ${ATLAS_COPY_FILES})
+ configure_file (${CMAKE_SOURCE_DIR}/${t} ${PROJECT_BINARY_DIR}/${t} COPYONLY)
+endforeach (t)
+
+include_directories (${CMAKE_SOURCE_DIR}/${ATLAS_INTERNAL_INCLUDES} ${CMAKE_SOURCE_DIR}/${ATLAS_INCLUDE_DIR})
+
+set (LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
+
+#variable to build only data structures in tests
+if (NOT DATA_STRUCTS_ONLY)
+ message ("Defaulting to build all tests")
+ add_subdirectory (tests)
+else ()
+ message ("Building only data structures")
+ add_subdirectory (tests/data_structures)
+endif ()
+
+add_subdirectory (src)
+add_library (atlas $ $ $ $ $ $) #defaults to static build
+
+#install ()
diff --git a/runtime/src/README.md b/ARP_CSFR/runtime/README.md
similarity index 100%
rename from runtime/src/README.md
rename to ARP_CSFR/runtime/README.md
diff --git a/ARP_CSFR/runtime/include/atlas_alloc.h b/ARP_CSFR/runtime/include/atlas_alloc.h
new file mode 100644
index 0000000000000000000000000000000000000000..46ea81ce1472858602d0034800af5eee4bad9be0
--- /dev/null
+++ b/ARP_CSFR/runtime/include/atlas_alloc.h
@@ -0,0 +1,194 @@
+/*
+ * (c) Copyright 2016 Hewlett Packard Enterprise Development LP
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version. This program is
+ * distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details. You should have received a copy of the GNU Lesser
+ * General Public License along with this program. If not, see
+ * .
+ */
+
+
+#ifndef ATLAS_ALLOC_H
+#define ATLAS_ALLOC_H
+
+#include
+#include
+#include
+
+//
+// Persistent region API
+// These are interfaces for creating and managing persistent regions,
+// entities that contain persistent data. Once a persistent region is
+// created, objects can be allocated out of the region, e.g. by using
+// nvm_alloc. Any data not in a persistent region is considered
+// transient.
+//
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+///
+/// @brief Create a named persistent region.
+/// @param name Name of the persistent region
+/// @param flags access flag (one of O_RDONLY, O_WRONLY, O_RDWR)
+/// @return Id of the region created
+///
+/// This interface does not check for an existing entry with
+/// the same name. If a region with the same name already exists, the
+/// behavior of the program is undefined.
+///
+uint32_t NVM_CreateRegion(const char *name, int flags);
+
+///
+/// @brief Create a persistent region with the provided name.
+/// @param name Name of the persistent region
+/// @param flags access flag (one of O_RDONLY, O_WRONLY, O_RDWR)
+/// @param is_created Indicator whether the region got created as a
+/// result of the call
+/// @return Id of the region found or created
+///
+/// If the region already exists, the existing id of the region is returned.
+/// Otherwise a region is created and its newly assigned id returned.
+///
+uint32_t NVM_FindOrCreateRegion(const char *name, int flags, int *is_created);
+
+///
+/// @brief Find the id of a region when it is known to exist already
+/// @param name Name of the persistent region
+/// @param flags access flag (one of O_RDONLY, O_WRONLY, O_RDWR)
+/// @return Id of the region found
+///
+/// This interface should be used over NVM_FindOrCreateRegion for
+/// efficiency reasons if the region is known to exist. If a region
+/// with the provided name does not exist, an assertion failure will
+/// occur.
+///
+uint32_t NVM_FindRegion(const char *name, int flags);
+
+///
+/// @brief Delete the region with the provided name.
+/// @param name Name of the persistent region
+///
+/// Use this interface to completely destroy a region. If the region
+/// does not exist, an assertion failure will occur.
+///
+void NVM_DeleteRegion(const char *name);
+
+///
+/// @brief Close a persistent region
+/// @param rid Region id
+///
+/// After closing, it won't be available to the calling process
+/// without calling NVM_FindOrCreateRegion. The region will stay in
+/// NVM even after calling this interface. This interface allows
+/// closing a region with normal bookkeeping.
+///
+void NVM_CloseRegion(uint32_t rid);
+
+///
+/// @brief Get the root pointer of the persistent region
+/// @param rid Region id
+/// @return Root pointer of the region
+///
+/// The region must have been created already. Currently, only one
+/// root is implemented for a given region. The idea is that anything
+/// within a region that is not reachable from the root after program
+/// termination is assumed to be garbage and can be recycled. During
+/// execution, anything within a region that is not reachable from the
+/// root or from other _roots_ (in the GC sense) is assumed to be
+/// garbage as well.
+///
+void *NVM_GetRegionRoot(uint32_t rid);
+
+///
+/// @brief Set the root pointer of an existing persistent region
+/// @param rid Region id
+/// @param root The new root of the region
+///
+void NVM_SetRegionRoot(uint32_t rid, void *root);
+
+///
+/// @brief Determines if a memory location is within a region
+/// @param ptr Queried address
+/// @param sz Size of the location in bytes
+/// @return 1 if within the region, otherwise 0
+///
+int NVM_IsInRegion(void *ptr, size_t sz);
+
+///
+/// @brief Determines if the addresses are on different cache lines
+///
+/// @param p1 First address
+/// @param p2 Second address
+/// @return Indicates whether the addresses are on different cache
+/// lines
+///
+/// The objects under consideration must not cross cache lines,
+/// otherwise this interface is inadequate.
+///
+int isOnDifferentCacheLine(void *p1, void *p2);
+
+///
+/// @brief Determines if a memory location is aligned to a cache line
+///
+/// @param p Address of memory location under consideration
+/// @return Indicates whether the memory location is cache line
+/// aligned
+///
+int isCacheLineAligned(void *p);
+
+///
+/// @brief Malloc style interface for allocation from a persistent
+/// region
+///
+/// @param sz Size of location to be allocated
+/// @param rid Id of persistent region for allocation
+/// @return Address of memory location allocated
+///
+void *nvm_alloc(size_t sz, uint32_t rid);
+
+///
+/// @brief Calloc style interface for allocation from a persistent
+/// region
+///
+/// @param nmemb Number of elements in the array to be allocated
+/// @param sz Size of each element
+/// @param rid Id of persistent region for allocation
+/// @return Pointer to allocated memory
+///
+void *nvm_calloc(size_t nmemb, size_t sz, uint32_t rid);
+
+///
+/// @brief Realloc style interface for allocation from a persistent
+/// region
+///
+/// @param ptr Address of memory block provided
+/// @param sz New size of allocation
+/// @param rid Id of persistent region for allocation
+/// @return Pointer to re-allocated memory
+///
+void *nvm_realloc(void *ptr, size_t sz, uint32_t rid);
+
+///
+/// @brief Deallocation interface for persistent data
+///
+/// @param ptr Address of memory location to be freed.
+///
+/// Though the usual use case would be for the location to be in
+/// persistent memory, this interface will also work for transient
+/// data. The implementation is required to transparently handle
+/// this case as well.
+///
+void nvm_free(void *ptr);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/ARP_CSFR/runtime/include/atlas_alloc_cpp.hpp b/ARP_CSFR/runtime/include/atlas_alloc_cpp.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..9f201bb76c36d36ff9bc9c51c9f370e1e09324fb
--- /dev/null
+++ b/ARP_CSFR/runtime/include/atlas_alloc_cpp.hpp
@@ -0,0 +1,120 @@
+/*
+ * (c) Copyright 2016 Hewlett Packard Enterprise Development LP
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version. This program is
+ * distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details. You should have received a copy of the GNU Lesser
+ * General Public License along with this program. If not, see
+ * .
+ */
+
+
+#ifndef ATLAS_ALLOC_CPP_H
+#define ATLAS_ALLOC_CPP_H
+
+// Forward declarations
+namespace Atlas
+{
+ class PRegion;
+}
+
+///
+/// @brief Get a handle to a persistent region
+/// @param rid Region identifier
+/// @return Pointer to the corresponding persistent region
+///
+/// Currently, this interface is to be used by a client only for the
+/// placement new operations
+///
+Atlas::PRegion *NVM_GetRegion(uint32_t rid);
+
+///
+/// @brief Object allocation for C++
+/// @param sz Allocation size
+/// @param rgn Pointer to the region to serve the allocation from
+/// @return Pointer to memory allocated
+///
+/// This interface overloads the C++ placement new operator. The
+/// corresponding delete operation is NVM_Destroy.
+///
+void* operator new(size_t sz, Atlas::PRegion *rgn) noexcept;
+
+///
+/// @brief Array form allocation for C++, type must have explicit
+/// destructor
+/// @param sz Allocation size
+/// @param rgn Pointer to the region to serve the allocation from
+/// @return Pointer to memory allocated
+///
+/// This interface overloads the array form C++ placement new
+/// operator. The type of the array elements must have an explicit
+/// destructor. The corresponding delete operation is
+/// NVM_Destroy_Array.
+///
+void* operator new[](size_t sz, Atlas::PRegion *rgn) noexcept;
+
+///
+/// @brief Object destruction for C++
+/// @param ptr Pointer to memory to be deallocated
+///
+/// This interface should be called for destroying an object that was
+/// created from a persistent region using the single-object new
+/// operator. The implementation calls the destructor followed by
+/// actual deallocation. This interface can also be called for
+/// destroying an object that was created using the default
+/// single-object new operator. If the latter is the case, the
+/// implementation detects this situation and turns around to call the
+/// default single-object delete operator. This interface must not be
+/// called for deallocating an object created in any other way, e.g. a
+/// placement new operator where the placement address is not within a
+/// persistent region.
+///
+template static inline void NVM_Destroy(T *ptr)
+{
+ if (!ptr) return;
+ if (!NVM_IsInRegion(ptr, 1 /* dummy, since size unknown */)) {
+ delete ptr;
+ return;
+ }
+ ptr->~T();
+ void nvm_delete(void*);
+ nvm_delete(ptr);
+}
+
+///
+/// @brief Array form destruction for C++, type must have explicit
+/// destructor
+/// @param ptr Pointer to memory to be deallocated
+///
+/// This interface should be called for destroying an array of objects
+/// that was created from a persistent region using the array-form new
+/// operator. The implementation calls the destructors for all objects
+/// of the array followed by actual deallocation. Note that the type
+/// of the array elements must have an explicit destructor for this
+/// interface to work correctly. This interface can also be called for
+/// destroying an array of objects that was created using the default
+/// array-form new operator. If the latter is the case, the
+/// implementation detects this situation and turns around to call the
+/// default array-form delete operator. This interface must not be
+/// called for deallocating an object created in any other way.
+///
+template static inline void NVM_Destroy_Array(T *ptr)
+{
+ if (!ptr) return;
+ if (!NVM_IsInRegion(ptr, 1 /* dummy, since size unknown */)) {
+ delete [] ptr;
+ return;
+ }
+ char *delete_ptr = reinterpret_cast(ptr) - sizeof(size_t);
+ size_t count = *reinterpret_cast(delete_ptr);
+ for (int i=count-1; i>=0; --i) (ptr+i)->~T();
+ void nvm_delete(void*);
+ nvm_delete(delete_ptr);
+}
+
+#endif
diff --git a/ARP_CSFR/runtime/include/atlas_api.h b/ARP_CSFR/runtime/include/atlas_api.h
new file mode 100644
index 0000000000000000000000000000000000000000..e2076651a227bf3838ceb39a1db070d0b1e2f53e
--- /dev/null
+++ b/ARP_CSFR/runtime/include/atlas_api.h
@@ -0,0 +1,179 @@
+/*
+ * (c) Copyright 2016 Hewlett Packard Enterprise Development LP
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version. This program is
+ * distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details. You should have received a copy of the GNU Lesser
+ * General Public License along with this program. If not, see
+ * .
+ */
+
+
+#ifndef ATLAS_API_H
+#define ATLAS_API_H
+
+#include
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+//
+// Here are the APIs for initializing/finalizing Atlas. Each of the
+// following 2 interfaces must be called only once.
+
+///
+/// Initialize Atlas internal data structures. This should be
+/// called before persistent memory access.
+///
+void NVM_Initialize();
+
+///
+/// Finalize Atlas internal data structures. This should be called
+/// before normal program exit. If not called, the implementation
+/// will assume that program exit was abnormal and will require
+/// invocation of recovery before restart.
+///
+void NVM_Finalize();
+
+
+void NVM_UsrDone();
+
+
+//
+// No special interfaces are required for lock-based critical
+// sections if compiler support is available. Use the
+// compiler-plugin to take advantage of automatic instrumentation
+// of critical sections.
+//
+
+///
+/// The following 2 interfaces demarcate a failure-atomic section
+/// of code, i.e. code where persistent locations are updated and
+/// all-or-nothing behavior of those updates is required. Note that
+/// no isolation among threads is provided by these 2 interfaces.
+///
+void nvm_begin_durable();
+void nvm_end_durable();
+
+//
+// The following interfaces are for low-level programming of
+// persistent memory, where the high-level consistency support
+// afforded by Atlas is not used. Instead, persistence is explicitly
+// managed by the following interfaces.
+//
+
+///
+/// Is the following address with associated size within an open
+/// persistent region?
+///
+int NVM_IsInOpenPR(void *addr, size_t sz /* in bytes */);
+
+///
+/// Persistent sync of a range of addresses
+///
+void nvm_psync(void *addr, size_t sz /* in bytes */);
+
+///
+/// Persistent sync of a range of addresses without a trailing barrier
+///
+void nvm_psync_acq(void *addr, size_t sz /* in bytes */);
+
+// This may be invoked by a user program to print out Atlas statistics
+#ifdef NVM_STATS
+ void NVM_PrintStats();
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+// End of Atlas APIs
+
+#ifdef NVM_STATS
+extern __thread uint64_t num_flushes;
+#endif
+
+// Useful macros
+#define NVM_BEGIN_DURABLE() nvm_begin_durable()
+#define NVM_END_DURABLE() nvm_end_durable()
+
+#define NVM_CLFLUSH(p) nvm_clflush((char*)(void*)(p))
+
+#ifndef DISABLE_FLUSHES
+#define NVM_FLUSH(p) \
+ { full_fence(); \
+ NVM_CLFLUSH((p)); \
+ full_fence(); \
+ }
+
+#define NVM_FLUSH_COND(p) \
+ { if (NVM_IsInOpenPR(p, 1)) { \
+ full_fence(); \
+ NVM_CLFLUSH((p)); \
+ full_fence(); \
+ } \
+ }
+
+#define NVM_FLUSH_ACQ(p) \
+ { full_fence(); \
+ NVM_CLFLUSH(p); \
+ }
+
+#define NVM_FLUSH_ACQ_COND(p) \
+ { if (NVM_IsInOpenPR(p, 1)) { \
+ full_fence(); \
+ NVM_CLFLUSH(p); \
+ } \
+ }
+
+#define NVM_PSYNC(p1,s) nvm_psync(p1,s)
+
+#define NVM_PSYNC_COND(p1,s) \
+ { if (NVM_IsInOpenPR(p1, s)) nvm_psync(p1,s); }
+
+#define NVM_PSYNC_ACQ(p1,s) \
+ { \
+ nvm_psync_acq(p1,s); \
+ } \
+
+#define NVM_PSYNC_ACQ_COND(p1,s) \
+ { \
+ if (NVM_IsInOpenPR(p1, s)) nvm_psync_acq(p1, s); \
+ } \
+
+#else
+#define NVM_FLUSH(p)
+#define NVM_FLUSH_COND(p)
+#define NVM_FLUSH_ACQ(p)
+#define NVM_FLUSH_ACQ_COND(p)
+#define NVM_PSYNC(p1,s)
+#define NVM_PSYNC_COND(p1,s)
+#define NVM_PSYNC_ACQ(p1,s)
+#define NVM_PSYNC_ACQ_COND(p1,s)
+#endif
+
+static __inline void nvm_clflush(const void *p)
+{
+#ifndef DISABLE_FLUSHES
+#ifdef NVM_STATS
+ ++num_flushes;
+#endif
+ __asm__ __volatile__ (
+ "clflush %0 \n" : "+m" (*(char*)(p))
+ );
+#endif
+}
+
+// Used in conjunction with clflush.
+static __inline void full_fence() {
+ __asm__ __volatile__ ("mfence" ::: "memory");
+ }
+
+#endif
diff --git a/runtime/scripts b/ARP_CSFR/runtime/scripts
similarity index 100%
rename from runtime/scripts
rename to ARP_CSFR/runtime/scripts
diff --git a/runtime/src/CMakeCache.txt b/ARP_CSFR/runtime/src/CMakeCache.txt
similarity index 100%
rename from runtime/src/CMakeCache.txt
rename to ARP_CSFR/runtime/src/CMakeCache.txt
diff --git a/runtime/src/CMakeFiles/3.5.1/CMakeCCompiler.cmake b/ARP_CSFR/runtime/src/CMakeFiles/3.5.1/CMakeCCompiler.cmake
similarity index 100%
rename from runtime/src/CMakeFiles/3.5.1/CMakeCCompiler.cmake
rename to ARP_CSFR/runtime/src/CMakeFiles/3.5.1/CMakeCCompiler.cmake
diff --git a/runtime/src/CMakeFiles/3.5.1/CMakeCXXCompiler.cmake b/ARP_CSFR/runtime/src/CMakeFiles/3.5.1/CMakeCXXCompiler.cmake
similarity index 100%
rename from runtime/src/CMakeFiles/3.5.1/CMakeCXXCompiler.cmake
rename to ARP_CSFR/runtime/src/CMakeFiles/3.5.1/CMakeCXXCompiler.cmake
diff --git a/runtime/src/CMakeFiles/3.5.1/CMakeDetermineCompilerABI_C.bin b/ARP_CSFR/runtime/src/CMakeFiles/3.5.1/CMakeDetermineCompilerABI_C.bin
similarity index 100%
rename from runtime/src/CMakeFiles/3.5.1/CMakeDetermineCompilerABI_C.bin
rename to ARP_CSFR/runtime/src/CMakeFiles/3.5.1/CMakeDetermineCompilerABI_C.bin
diff --git a/runtime/src/CMakeFiles/3.5.1/CMakeDetermineCompilerABI_CXX.bin b/ARP_CSFR/runtime/src/CMakeFiles/3.5.1/CMakeDetermineCompilerABI_CXX.bin
similarity index 100%
rename from runtime/src/CMakeFiles/3.5.1/CMakeDetermineCompilerABI_CXX.bin
rename to ARP_CSFR/runtime/src/CMakeFiles/3.5.1/CMakeDetermineCompilerABI_CXX.bin
diff --git a/runtime/src/CMakeFiles/3.5.1/CMakeSystem.cmake b/ARP_CSFR/runtime/src/CMakeFiles/3.5.1/CMakeSystem.cmake
similarity index 100%
rename from runtime/src/CMakeFiles/3.5.1/CMakeSystem.cmake
rename to ARP_CSFR/runtime/src/CMakeFiles/3.5.1/CMakeSystem.cmake
diff --git a/runtime/src/CMakeFiles/3.5.1/CompilerIdC/CMakeCCompilerId.c b/ARP_CSFR/runtime/src/CMakeFiles/3.5.1/CompilerIdC/CMakeCCompilerId.c
similarity index 100%
rename from runtime/src/CMakeFiles/3.5.1/CompilerIdC/CMakeCCompilerId.c
rename to ARP_CSFR/runtime/src/CMakeFiles/3.5.1/CompilerIdC/CMakeCCompilerId.c
diff --git a/runtime/src/CMakeFiles/3.5.1/CompilerIdCXX/CMakeCXXCompilerId.cpp b/ARP_CSFR/runtime/src/CMakeFiles/3.5.1/CompilerIdCXX/CMakeCXXCompilerId.cpp
similarity index 100%
rename from runtime/src/CMakeFiles/3.5.1/CompilerIdCXX/CMakeCXXCompilerId.cpp
rename to ARP_CSFR/runtime/src/CMakeFiles/3.5.1/CompilerIdCXX/CMakeCXXCompilerId.cpp
diff --git a/runtime/src/CMakeFiles/CMakeDirectoryInformation.cmake b/ARP_CSFR/runtime/src/CMakeFiles/CMakeDirectoryInformation.cmake
similarity index 100%
rename from runtime/src/CMakeFiles/CMakeDirectoryInformation.cmake
rename to ARP_CSFR/runtime/src/CMakeFiles/CMakeDirectoryInformation.cmake
diff --git a/runtime/src/CMakeFiles/CMakeError.log b/ARP_CSFR/runtime/src/CMakeFiles/CMakeError.log
similarity index 100%
rename from runtime/src/CMakeFiles/CMakeError.log
rename to ARP_CSFR/runtime/src/CMakeFiles/CMakeError.log
diff --git a/runtime/src/CMakeFiles/CMakeOutput.log b/ARP_CSFR/runtime/src/CMakeFiles/CMakeOutput.log
similarity index 100%
rename from runtime/src/CMakeFiles/CMakeOutput.log
rename to ARP_CSFR/runtime/src/CMakeFiles/CMakeOutput.log
diff --git a/ARP_CSFR/runtime/src/CMakeFiles/Makefile.cmake b/ARP_CSFR/runtime/src/CMakeFiles/Makefile.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..60797a92dfe70cbcffc0ba14ecdd1f8f8ded20a3
--- /dev/null
+++ b/ARP_CSFR/runtime/src/CMakeFiles/Makefile.cmake
@@ -0,0 +1,258 @@
+# CMAKE generated file: DO NOT EDIT!
+# Generated by "Unix Makefiles" Generator, CMake Version 3.5
+
+# The generator used is:
+set(CMAKE_DEPENDS_GENERATOR "Unix Makefiles")
+
+# The top level Makefile was generated from the following files:
+set(CMAKE_MAKEFILE_DEPENDS
+ "CMakeCache.txt"
+ "../CMakeLists.txt"
+ "../README.md"
+ "../include/atlas_alloc.h"
+ "../include/atlas_alloc_cpp.hpp"
+ "../include/atlas_api.h"
+ "CMakeFiles/3.5.1/CMakeCCompiler.cmake"
+ "CMakeFiles/3.5.1/CMakeCXXCompiler.cmake"
+ "CMakeFiles/3.5.1/CMakeSystem.cmake"
+ "CMakeFiles/feature_tests.c"
+ "CMakeFiles/feature_tests.cxx"
+ "CMakeLists.txt"
+ "cache_flush/CMakeLists.txt"
+ "consistency/CMakeLists.txt"
+ "logger/CMakeLists.txt"
+ "pmalloc/CMakeLists.txt"
+ "pregion_mgr/CMakeLists.txt"
+ "recover/CMakeLists.txt"
+ "util/CMakeLists.txt"
+ "../tests/CMakeLists.txt"
+ "../tests/consistency/CMakeLists.txt"
+ "../tests/consistency/test_consistency"
+ "../tests/data_structures/CMakeLists.txt"
+ "../tests/data_structures/CQ/CMakeLists.txt"
+ "../tests/data_structures/RB/CMakeLists.txt"
+ "../tests/data_structures/TATP/CMakeLists.txt"
+ "../tests/data_structures/TPCC/CMakeLists.txt"
+ "../tests/data_structures_inputs/alarm_clock.in"
+ "../tests/data_structures_inputs/alarm_clock.ref"
+ "../tests/data_structures_inputs/alarm_clock_nvm.in"
+ "../tests/data_structures_inputs/alarm_clock_nvm.ref"
+ "../tests/data_structures_inputs/cow_array_list.in"
+ "../tests/data_structures_inputs/cow_array_list.ref"
+ "../tests/data_structures_inputs/cow_array_list_nvm.in"
+ "../tests/data_structures_inputs/cow_array_list_nvm.ref"
+ "../tests/data_structures_inputs/queue.in"
+ "../tests/data_structures_inputs/queue.ref"
+ "../tests/data_structures_inputs/queue_nvm.in"
+ "../tests/data_structures_inputs/queue_nvm.ref"
+ "../tests/data_structures_inputs/sll.in"
+ "../tests/data_structures_inputs/sll.ref"
+ "../tests/data_structures_inputs/sll_ll.in"
+ "../tests/data_structures_inputs/sll_ll.ref"
+ "../tests/data_structures_inputs/sll_nvm.in"
+ "../tests/data_structures_inputs/sll_nvm.ref"
+ "../tests/data_structures_inputs/stores.in"
+ "../tests/data_structures_inputs/stores.ref"
+ "../tests/data_structures_inputs/stores_nvm.in"
+ "../tests/data_structures_inputs/stores_nvm.ref"
+ "../tests/data_structures_inputs/timing.txt"
+ "../tests/pmalloc/CMakeLists.txt"
+ "../tests/pmalloc/test_pmalloc"
+ "../tests/region/CMakeLists.txt"
+ "../tests/region/test_region"
+ "../tests/run_quick_test"
+ "/usr/share/cmake-3.5/Modules/CMakeCCompiler.cmake.in"
+ "/usr/share/cmake-3.5/Modules/CMakeCCompilerABI.c"
+ "/usr/share/cmake-3.5/Modules/CMakeCInformation.cmake"
+ "/usr/share/cmake-3.5/Modules/CMakeCXXCompiler.cmake.in"
+ "/usr/share/cmake-3.5/Modules/CMakeCXXCompilerABI.cpp"
+ "/usr/share/cmake-3.5/Modules/CMakeCXXInformation.cmake"
+ "/usr/share/cmake-3.5/Modules/CMakeCommonLanguageInclude.cmake"
+ "/usr/share/cmake-3.5/Modules/CMakeCompilerIdDetection.cmake"
+ "/usr/share/cmake-3.5/Modules/CMakeConfigurableFile.in"
+ "/usr/share/cmake-3.5/Modules/CMakeDetermineCCompiler.cmake"
+ "/usr/share/cmake-3.5/Modules/CMakeDetermineCXXCompiler.cmake"
+ "/usr/share/cmake-3.5/Modules/CMakeDetermineCompileFeatures.cmake"
+ "/usr/share/cmake-3.5/Modules/CMakeDetermineCompiler.cmake"
+ "/usr/share/cmake-3.5/Modules/CMakeDetermineCompilerABI.cmake"
+ "/usr/share/cmake-3.5/Modules/CMakeDetermineCompilerId.cmake"
+ "/usr/share/cmake-3.5/Modules/CMakeDetermineSystem.cmake"
+ "/usr/share/cmake-3.5/Modules/CMakeFindBinUtils.cmake"
+ "/usr/share/cmake-3.5/Modules/CMakeGenericSystem.cmake"
+ "/usr/share/cmake-3.5/Modules/CMakeLanguageInformation.cmake"
+ "/usr/share/cmake-3.5/Modules/CMakeParseArguments.cmake"
+ "/usr/share/cmake-3.5/Modules/CMakeParseImplicitLinkInfo.cmake"
+ "/usr/share/cmake-3.5/Modules/CMakeSystem.cmake.in"
+ "/usr/share/cmake-3.5/Modules/CMakeSystemSpecificInformation.cmake"
+ "/usr/share/cmake-3.5/Modules/CMakeSystemSpecificInitialize.cmake"
+ "/usr/share/cmake-3.5/Modules/CMakeTestCCompiler.cmake"
+ "/usr/share/cmake-3.5/Modules/CMakeTestCXXCompiler.cmake"
+ "/usr/share/cmake-3.5/Modules/CMakeTestCompilerCommon.cmake"
+ "/usr/share/cmake-3.5/Modules/CMakeUnixFindMake.cmake"
+ "/usr/share/cmake-3.5/Modules/CheckForPthreads.c"
+ "/usr/share/cmake-3.5/Modules/CheckIncludeFile.c.in"
+ "/usr/share/cmake-3.5/Modules/CheckIncludeFile.cmake"
+ "/usr/share/cmake-3.5/Modules/CheckLibraryExists.cmake"
+ "/usr/share/cmake-3.5/Modules/CheckSymbolExists.cmake"
+ "/usr/share/cmake-3.5/Modules/Compiler/ADSP-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.5/Modules/Compiler/ARMCC-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.5/Modules/Compiler/AppleClang-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.5/Modules/Compiler/Borland-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.5/Modules/Compiler/Clang-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.5/Modules/Compiler/Clang-DetermineCompilerInternal.cmake"
+ "/usr/share/cmake-3.5/Modules/Compiler/Comeau-CXX-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.5/Modules/Compiler/Compaq-C-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.5/Modules/Compiler/Compaq-CXX-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.5/Modules/Compiler/Cray-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.5/Modules/Compiler/Embarcadero-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.5/Modules/Compiler/Fujitsu-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.5/Modules/Compiler/GHS-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.5/Modules/Compiler/GNU-C-FeatureTests.cmake"
+ "/usr/share/cmake-3.5/Modules/Compiler/GNU-C.cmake"
+ "/usr/share/cmake-3.5/Modules/Compiler/GNU-CXX-FeatureTests.cmake"
+ "/usr/share/cmake-3.5/Modules/Compiler/GNU-CXX.cmake"
+ "/usr/share/cmake-3.5/Modules/Compiler/GNU-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.5/Modules/Compiler/GNU.cmake"
+ "/usr/share/cmake-3.5/Modules/Compiler/HP-C-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.5/Modules/Compiler/HP-CXX-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.5/Modules/Compiler/IAR-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.5/Modules/Compiler/IBMCPP-C-DetermineVersionInternal.cmake"
+ "/usr/share/cmake-3.5/Modules/Compiler/IBMCPP-CXX-DetermineVersionInternal.cmake"
+ "/usr/share/cmake-3.5/Modules/Compiler/Intel-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.5/Modules/Compiler/MIPSpro-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.5/Modules/Compiler/MSVC-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.5/Modules/Compiler/OpenWatcom-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.5/Modules/Compiler/PGI-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.5/Modules/Compiler/PathScale-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.5/Modules/Compiler/SCO-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.5/Modules/Compiler/SDCC-C-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.5/Modules/Compiler/SunPro-C-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.5/Modules/Compiler/SunPro-CXX-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.5/Modules/Compiler/TI-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.5/Modules/Compiler/TinyCC-C-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.5/Modules/Compiler/VisualAge-C-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.5/Modules/Compiler/VisualAge-CXX-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.5/Modules/Compiler/Watcom-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.5/Modules/Compiler/XL-C-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.5/Modules/Compiler/XL-CXX-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.5/Modules/Compiler/zOS-C-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.5/Modules/Compiler/zOS-CXX-DetermineCompiler.cmake"
+ "/usr/share/cmake-3.5/Modules/FindPackageHandleStandardArgs.cmake"
+ "/usr/share/cmake-3.5/Modules/FindPackageMessage.cmake"
+ "/usr/share/cmake-3.5/Modules/FindThreads.cmake"
+ "/usr/share/cmake-3.5/Modules/Internal/FeatureTesting.cmake"
+ "/usr/share/cmake-3.5/Modules/MultiArchCross.cmake"
+ "/usr/share/cmake-3.5/Modules/Platform/Linux-CXX.cmake"
+ "/usr/share/cmake-3.5/Modules/Platform/Linux-GNU-C.cmake"
+ "/usr/share/cmake-3.5/Modules/Platform/Linux-GNU-CXX.cmake"
+ "/usr/share/cmake-3.5/Modules/Platform/Linux-GNU.cmake"
+ "/usr/share/cmake-3.5/Modules/Platform/Linux.cmake"
+ "/usr/share/cmake-3.5/Modules/Platform/UnixPaths.cmake"
+ )
+
+# The corresponding makefile is:
+set(CMAKE_MAKEFILE_OUTPUTS
+ "Makefile"
+ "CMakeFiles/cmake.check_cache"
+ )
+
+# Byproducts of CMake generate step:
+set(CMAKE_MAKEFILE_PRODUCTS
+ "CMakeFiles/3.5.1/CMakeSystem.cmake"
+ "CMakeFiles/3.5.1/CMakeCCompiler.cmake"
+ "CMakeFiles/3.5.1/CMakeCXXCompiler.cmake"
+ "CMakeFiles/3.5.1/CMakeCCompiler.cmake"
+ "CMakeFiles/3.5.1/CMakeCXXCompiler.cmake"
+ "README.md"
+ "include/atlas_alloc.h"
+ "include/atlas_api.h"
+ "include/atlas_alloc_cpp.hpp"
+ "tests/run_quick_test"
+ "tests/data_structures_inputs/timing.txt"
+ "tests/data_structures_inputs/cow_array_list_nvm.ref"
+ "tests/data_structures_inputs/cow_array_list.ref"
+ "tests/data_structures_inputs/queue_nvm.ref"
+ "tests/data_structures_inputs/queue.ref"
+ "tests/data_structures_inputs/sll_ll.ref"
+ "tests/data_structures_inputs/sll_nvm.ref"
+ "tests/data_structures_inputs/sll.ref"
+ "tests/data_structures_inputs/alarm_clock.ref"
+ "tests/data_structures_inputs/alarm_clock_nvm.ref"
+ "tests/data_structures_inputs/cow_array_list.in"
+ "tests/data_structures_inputs/cow_array_list_nvm.in"
+ "tests/data_structures_inputs/queue_nvm.in"
+ "tests/data_structures_inputs/queue.in"
+ "tests/data_structures_inputs/sll.in"
+ "tests/data_structures_inputs/sll_ll.in"
+ "tests/data_structures_inputs/sll_nvm.in"
+ "tests/data_structures_inputs/alarm_clock.in"
+ "tests/data_structures_inputs/alarm_clock_nvm.in"
+ "tests/data_structures_inputs/stores.ref"
+ "tests/data_structures_inputs/stores_nvm.ref"
+ "tests/data_structures_inputs/stores.in"
+ "tests/data_structures_inputs/stores_nvm.in"
+ "tests/consistency/test_consistency"
+ "tests/region/test_region"
+ "tests/pmalloc/test_pmalloc"
+ "CMakeFiles/CMakeDirectoryInformation.cmake"
+ "tests/CMakeFiles/CMakeDirectoryInformation.cmake"
+ "tests/region/CMakeFiles/CMakeDirectoryInformation.cmake"
+ "tests/data_structures/CMakeFiles/CMakeDirectoryInformation.cmake"
+ "tests/data_structures/TATP/CMakeFiles/CMakeDirectoryInformation.cmake"
+ "tests/data_structures/RB/CMakeFiles/CMakeDirectoryInformation.cmake"
+ "tests/data_structures/TPCC/CMakeFiles/CMakeDirectoryInformation.cmake"
+ "tests/data_structures/CQ/CMakeFiles/CMakeDirectoryInformation.cmake"
+ "tests/consistency/CMakeFiles/CMakeDirectoryInformation.cmake"
+ "tests/pmalloc/CMakeFiles/CMakeDirectoryInformation.cmake"
+ "src/CMakeFiles/CMakeDirectoryInformation.cmake"
+ "src/cache_flush/CMakeFiles/CMakeDirectoryInformation.cmake"
+ "src/consistency/CMakeFiles/CMakeDirectoryInformation.cmake"
+ "src/logger/CMakeFiles/CMakeDirectoryInformation.cmake"
+ "src/util/CMakeFiles/CMakeDirectoryInformation.cmake"
+ "src/pmalloc/CMakeFiles/CMakeDirectoryInformation.cmake"
+ "src/pregion_mgr/CMakeFiles/CMakeDirectoryInformation.cmake"
+ "src/recover/CMakeFiles/CMakeDirectoryInformation.cmake"
+ )
+
+# Dependency information for all targets:
+set(CMAKE_DEPEND_INFO_FILES
+ "CMakeFiles/atlas.dir/DependInfo.cmake"
+ "tests/region/CMakeFiles/focdelete.dir/DependInfo.cmake"
+ "tests/region/CMakeFiles/focclose.dir/DependInfo.cmake"
+ "tests/region/CMakeFiles/createclose.dir/DependInfo.cmake"
+ "tests/region/CMakeFiles/createclosedelete.dir/DependInfo.cmake"
+ "tests/region/CMakeFiles/createclosefocclose.dir/DependInfo.cmake"
+ "tests/region/CMakeFiles/finddelete.dir/DependInfo.cmake"
+ "tests/data_structures/CMakeFiles/alarm_clock.dir/DependInfo.cmake"
+ "tests/data_structures/CMakeFiles/stores.dir/DependInfo.cmake"
+ "tests/data_structures/CMakeFiles/sll_mt.dir/DependInfo.cmake"
+ "tests/data_structures/CMakeFiles/sll.dir/DependInfo.cmake"
+ "tests/data_structures/CMakeFiles/queue.dir/DependInfo.cmake"
+ "tests/data_structures/CMakeFiles/cow_array_list.dir/DependInfo.cmake"
+ "tests/data_structures/CMakeFiles/sll_mt_ll.dir/DependInfo.cmake"
+ "tests/data_structures/CMakeFiles/sll_ll.dir/DependInfo.cmake"
+ "tests/data_structures/CMakeFiles/queue_nvm.dir/DependInfo.cmake"
+ "tests/data_structures/CMakeFiles/stores_nvm.dir/DependInfo.cmake"
+ "tests/data_structures/CMakeFiles/alarm_clock_nvm.dir/DependInfo.cmake"
+ "tests/data_structures/CMakeFiles/cow_array_list_nvm.dir/DependInfo.cmake"
+ "tests/data_structures/CMakeFiles/pc_nvm.dir/DependInfo.cmake"
+ "tests/data_structures/CMakeFiles/sll_nvm.dir/DependInfo.cmake"
+ "tests/data_structures/CMakeFiles/sps_nvm.dir/DependInfo.cmake"
+ "tests/data_structures/CMakeFiles/linked_list_nvm.dir/DependInfo.cmake"
+ "tests/data_structures/TATP/CMakeFiles/tatp_nvm.dir/DependInfo.cmake"
+ "tests/data_structures/RB/CMakeFiles/rb_nvm.dir/DependInfo.cmake"
+ "tests/data_structures/TPCC/CMakeFiles/tpcc_nvm.dir/DependInfo.cmake"
+ "tests/data_structures/CQ/CMakeFiles/cq_nvm.dir/DependInfo.cmake"
+ "tests/consistency/CMakeFiles/malloc_free_test.dir/DependInfo.cmake"
+ "tests/pmalloc/CMakeFiles/new_delete.dir/DependInfo.cmake"
+ "src/cache_flush/CMakeFiles/Cache_flush.dir/DependInfo.cmake"
+ "src/consistency/CMakeFiles/Consistency.dir/DependInfo.cmake"
+ "src/logger/CMakeFiles/Logger.dir/DependInfo.cmake"
+ "src/util/CMakeFiles/Util.dir/DependInfo.cmake"
+ "src/pmalloc/CMakeFiles/Pmalloc.dir/DependInfo.cmake"
+ "src/pregion_mgr/CMakeFiles/Pregion_mgr.dir/DependInfo.cmake"
+ "src/recover/CMakeFiles/clean_mem.dir/DependInfo.cmake"
+ "src/recover/CMakeFiles/recover.dir/DependInfo.cmake"
+ "src/recover/CMakeFiles/del_log.dir/DependInfo.cmake"
+ "src/recover/CMakeFiles/del_rgn.dir/DependInfo.cmake"
+ )
diff --git a/ARP_CSFR/runtime/src/CMakeFiles/Makefile2 b/ARP_CSFR/runtime/src/CMakeFiles/Makefile2
new file mode 100644
index 0000000000000000000000000000000000000000..20c7c64c74d4a34e11ef2fdba90090d3688356d7
--- /dev/null
+++ b/ARP_CSFR/runtime/src/CMakeFiles/Makefile2
@@ -0,0 +1,1909 @@
+# CMAKE generated file: DO NOT EDIT!
+# Generated by "Unix Makefiles" Generator, CMake Version 3.5
+
+# Default target executed when no arguments are given to make.
+default_target: all
+
+.PHONY : default_target
+
+# The main recursive all target
+all:
+
+.PHONY : all
+
+# The main recursive preinstall target
+preinstall:
+
+.PHONY : preinstall
+
+#=============================================================================
+# Special targets provided by cmake.
+
+# Disable implicit rules so canonical targets will work.
+.SUFFIXES:
+
+
+# Remove some rules from gmake that .SUFFIXES does not remove.
+SUFFIXES =
+
+.SUFFIXES: .hpux_make_needs_suffix_list
+
+
+# Suppress display of executed commands.
+$(VERBOSE).SILENT:
+
+
+# A target that is always out of date.
+cmake_force:
+
+.PHONY : cmake_force
+
+#=============================================================================
+# Set environment variables for the build.
+
+# The shell in which to execute make rules.
+SHELL = /bin/sh
+
+# The CMake executable.
+CMAKE_COMMAND = /usr/bin/cmake
+
+# The command to remove a file.
+RM = /usr/bin/cmake -E remove -f
+
+# Escaping for special characters.
+EQUALS = =
+
+# The top-level source directory on which CMake was run.
+CMAKE_SOURCE_DIR = /home/vgogte/SFR/CoupledSFR/runtime
+
+# The top-level build directory on which CMake was run.
+CMAKE_BINARY_DIR = /home/vgogte/SFR/CoupledSFR/runtime/src
+
+#=============================================================================
+# Target rules for target CMakeFiles/atlas.dir
+
+# All Build rule for target.
+CMakeFiles/atlas.dir/all: src/cache_flush/CMakeFiles/Cache_flush.dir/all
+CMakeFiles/atlas.dir/all: src/consistency/CMakeFiles/Consistency.dir/all
+CMakeFiles/atlas.dir/all: src/logger/CMakeFiles/Logger.dir/all
+CMakeFiles/atlas.dir/all: src/util/CMakeFiles/Util.dir/all
+CMakeFiles/atlas.dir/all: src/pmalloc/CMakeFiles/Pmalloc.dir/all
+CMakeFiles/atlas.dir/all: src/pregion_mgr/CMakeFiles/Pregion_mgr.dir/all
+ $(MAKE) -f CMakeFiles/atlas.dir/build.make CMakeFiles/atlas.dir/depend
+ $(MAKE) -f CMakeFiles/atlas.dir/build.make CMakeFiles/atlas.dir/build
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles --progress-num=26 "Built target atlas"
+.PHONY : CMakeFiles/atlas.dir/all
+
+# Include target in all.
+all: CMakeFiles/atlas.dir/all
+
+.PHONY : all
+
+# Build rule for subdir invocation for target.
+CMakeFiles/atlas.dir/rule: cmake_check_build_system
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 22
+ $(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/atlas.dir/all
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 0
+.PHONY : CMakeFiles/atlas.dir/rule
+
+# Convenience name for target.
+atlas: CMakeFiles/atlas.dir/rule
+
+.PHONY : atlas
+
+# clean rule for target.
+CMakeFiles/atlas.dir/clean:
+ $(MAKE) -f CMakeFiles/atlas.dir/build.make CMakeFiles/atlas.dir/clean
+.PHONY : CMakeFiles/atlas.dir/clean
+
+# clean rule for target.
+clean: CMakeFiles/atlas.dir/clean
+
+.PHONY : clean
+
+#=============================================================================
+# Directory level rules for directory tests
+
+# Convenience name for "all" pass in the directory.
+tests/all: tests/region/all
+tests/all: tests/data_structures/all
+tests/all: tests/consistency/all
+tests/all: tests/pmalloc/all
+
+.PHONY : tests/all
+
+# Convenience name for "clean" pass in the directory.
+tests/clean: tests/region/clean
+tests/clean: tests/data_structures/clean
+tests/clean: tests/consistency/clean
+tests/clean: tests/pmalloc/clean
+
+.PHONY : tests/clean
+
+# Convenience name for "preinstall" pass in the directory.
+tests/preinstall: tests/region/preinstall
+tests/preinstall: tests/data_structures/preinstall
+tests/preinstall: tests/consistency/preinstall
+tests/preinstall: tests/pmalloc/preinstall
+
+.PHONY : tests/preinstall
+
+#=============================================================================
+# Directory level rules for directory tests/region
+
+# Convenience name for "all" pass in the directory.
+tests/region/all: tests/region/CMakeFiles/focdelete.dir/all
+tests/region/all: tests/region/CMakeFiles/focclose.dir/all
+tests/region/all: tests/region/CMakeFiles/createclose.dir/all
+tests/region/all: tests/region/CMakeFiles/createclosedelete.dir/all
+tests/region/all: tests/region/CMakeFiles/createclosefocclose.dir/all
+tests/region/all: tests/region/CMakeFiles/finddelete.dir/all
+
+.PHONY : tests/region/all
+
+# Convenience name for "clean" pass in the directory.
+tests/region/clean: tests/region/CMakeFiles/focdelete.dir/clean
+tests/region/clean: tests/region/CMakeFiles/focclose.dir/clean
+tests/region/clean: tests/region/CMakeFiles/createclose.dir/clean
+tests/region/clean: tests/region/CMakeFiles/createclosedelete.dir/clean
+tests/region/clean: tests/region/CMakeFiles/createclosefocclose.dir/clean
+tests/region/clean: tests/region/CMakeFiles/finddelete.dir/clean
+
+.PHONY : tests/region/clean
+
+# Convenience name for "preinstall" pass in the directory.
+tests/region/preinstall:
+
+.PHONY : tests/region/preinstall
+
+#=============================================================================
+# Target rules for target tests/region/CMakeFiles/focdelete.dir
+
+# All Build rule for target.
+tests/region/CMakeFiles/focdelete.dir/all: CMakeFiles/atlas.dir/all
+ $(MAKE) -f tests/region/CMakeFiles/focdelete.dir/build.make tests/region/CMakeFiles/focdelete.dir/depend
+ $(MAKE) -f tests/region/CMakeFiles/focdelete.dir/build.make tests/region/CMakeFiles/focdelete.dir/build
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles --progress-num=50,51 "Built target focdelete"
+.PHONY : tests/region/CMakeFiles/focdelete.dir/all
+
+# Include target in all.
+all: tests/region/CMakeFiles/focdelete.dir/all
+
+.PHONY : all
+
+# Build rule for subdir invocation for target.
+tests/region/CMakeFiles/focdelete.dir/rule: cmake_check_build_system
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 24
+ $(MAKE) -f CMakeFiles/Makefile2 tests/region/CMakeFiles/focdelete.dir/all
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 0
+.PHONY : tests/region/CMakeFiles/focdelete.dir/rule
+
+# Convenience name for target.
+focdelete: tests/region/CMakeFiles/focdelete.dir/rule
+
+.PHONY : focdelete
+
+# clean rule for target.
+tests/region/CMakeFiles/focdelete.dir/clean:
+ $(MAKE) -f tests/region/CMakeFiles/focdelete.dir/build.make tests/region/CMakeFiles/focdelete.dir/clean
+.PHONY : tests/region/CMakeFiles/focdelete.dir/clean
+
+# clean rule for target.
+clean: tests/region/CMakeFiles/focdelete.dir/clean
+
+.PHONY : clean
+
+#=============================================================================
+# Target rules for target tests/region/CMakeFiles/focclose.dir
+
+# All Build rule for target.
+tests/region/CMakeFiles/focclose.dir/all: CMakeFiles/atlas.dir/all
+ $(MAKE) -f tests/region/CMakeFiles/focclose.dir/build.make tests/region/CMakeFiles/focclose.dir/depend
+ $(MAKE) -f tests/region/CMakeFiles/focclose.dir/build.make tests/region/CMakeFiles/focclose.dir/build
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles --progress-num=48,49 "Built target focclose"
+.PHONY : tests/region/CMakeFiles/focclose.dir/all
+
+# Include target in all.
+all: tests/region/CMakeFiles/focclose.dir/all
+
+.PHONY : all
+
+# Build rule for subdir invocation for target.
+tests/region/CMakeFiles/focclose.dir/rule: cmake_check_build_system
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 24
+ $(MAKE) -f CMakeFiles/Makefile2 tests/region/CMakeFiles/focclose.dir/all
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 0
+.PHONY : tests/region/CMakeFiles/focclose.dir/rule
+
+# Convenience name for target.
+focclose: tests/region/CMakeFiles/focclose.dir/rule
+
+.PHONY : focclose
+
+# clean rule for target.
+tests/region/CMakeFiles/focclose.dir/clean:
+ $(MAKE) -f tests/region/CMakeFiles/focclose.dir/build.make tests/region/CMakeFiles/focclose.dir/clean
+.PHONY : tests/region/CMakeFiles/focclose.dir/clean
+
+# clean rule for target.
+clean: tests/region/CMakeFiles/focclose.dir/clean
+
+.PHONY : clean
+
+#=============================================================================
+# Target rules for target tests/region/CMakeFiles/createclose.dir
+
+# All Build rule for target.
+tests/region/CMakeFiles/createclose.dir/all: CMakeFiles/atlas.dir/all
+ $(MAKE) -f tests/region/CMakeFiles/createclose.dir/build.make tests/region/CMakeFiles/createclose.dir/depend
+ $(MAKE) -f tests/region/CMakeFiles/createclose.dir/build.make tests/region/CMakeFiles/createclose.dir/build
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles --progress-num=36,37 "Built target createclose"
+.PHONY : tests/region/CMakeFiles/createclose.dir/all
+
+# Include target in all.
+all: tests/region/CMakeFiles/createclose.dir/all
+
+.PHONY : all
+
+# Build rule for subdir invocation for target.
+tests/region/CMakeFiles/createclose.dir/rule: cmake_check_build_system
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 24
+ $(MAKE) -f CMakeFiles/Makefile2 tests/region/CMakeFiles/createclose.dir/all
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 0
+.PHONY : tests/region/CMakeFiles/createclose.dir/rule
+
+# Convenience name for target.
+createclose: tests/region/CMakeFiles/createclose.dir/rule
+
+.PHONY : createclose
+
+# clean rule for target.
+tests/region/CMakeFiles/createclose.dir/clean:
+ $(MAKE) -f tests/region/CMakeFiles/createclose.dir/build.make tests/region/CMakeFiles/createclose.dir/clean
+.PHONY : tests/region/CMakeFiles/createclose.dir/clean
+
+# clean rule for target.
+clean: tests/region/CMakeFiles/createclose.dir/clean
+
+.PHONY : clean
+
+#=============================================================================
+# Target rules for target tests/region/CMakeFiles/createclosedelete.dir
+
+# All Build rule for target.
+tests/region/CMakeFiles/createclosedelete.dir/all: CMakeFiles/atlas.dir/all
+ $(MAKE) -f tests/region/CMakeFiles/createclosedelete.dir/build.make tests/region/CMakeFiles/createclosedelete.dir/depend
+ $(MAKE) -f tests/region/CMakeFiles/createclosedelete.dir/build.make tests/region/CMakeFiles/createclosedelete.dir/build
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles --progress-num=38,39 "Built target createclosedelete"
+.PHONY : tests/region/CMakeFiles/createclosedelete.dir/all
+
+# Include target in all.
+all: tests/region/CMakeFiles/createclosedelete.dir/all
+
+.PHONY : all
+
+# Build rule for subdir invocation for target.
+tests/region/CMakeFiles/createclosedelete.dir/rule: cmake_check_build_system
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 24
+ $(MAKE) -f CMakeFiles/Makefile2 tests/region/CMakeFiles/createclosedelete.dir/all
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 0
+.PHONY : tests/region/CMakeFiles/createclosedelete.dir/rule
+
+# Convenience name for target.
+createclosedelete: tests/region/CMakeFiles/createclosedelete.dir/rule
+
+.PHONY : createclosedelete
+
+# clean rule for target.
+tests/region/CMakeFiles/createclosedelete.dir/clean:
+ $(MAKE) -f tests/region/CMakeFiles/createclosedelete.dir/build.make tests/region/CMakeFiles/createclosedelete.dir/clean
+.PHONY : tests/region/CMakeFiles/createclosedelete.dir/clean
+
+# clean rule for target.
+clean: tests/region/CMakeFiles/createclosedelete.dir/clean
+
+.PHONY : clean
+
+#=============================================================================
+# Target rules for target tests/region/CMakeFiles/createclosefocclose.dir
+
+# All Build rule for target.
+tests/region/CMakeFiles/createclosefocclose.dir/all: CMakeFiles/atlas.dir/all
+ $(MAKE) -f tests/region/CMakeFiles/createclosefocclose.dir/build.make tests/region/CMakeFiles/createclosefocclose.dir/depend
+ $(MAKE) -f tests/region/CMakeFiles/createclosefocclose.dir/build.make tests/region/CMakeFiles/createclosefocclose.dir/build
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles --progress-num=40,41 "Built target createclosefocclose"
+.PHONY : tests/region/CMakeFiles/createclosefocclose.dir/all
+
+# Include target in all.
+all: tests/region/CMakeFiles/createclosefocclose.dir/all
+
+.PHONY : all
+
+# Build rule for subdir invocation for target.
+tests/region/CMakeFiles/createclosefocclose.dir/rule: cmake_check_build_system
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 24
+ $(MAKE) -f CMakeFiles/Makefile2 tests/region/CMakeFiles/createclosefocclose.dir/all
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 0
+.PHONY : tests/region/CMakeFiles/createclosefocclose.dir/rule
+
+# Convenience name for target.
+createclosefocclose: tests/region/CMakeFiles/createclosefocclose.dir/rule
+
+.PHONY : createclosefocclose
+
+# clean rule for target.
+tests/region/CMakeFiles/createclosefocclose.dir/clean:
+ $(MAKE) -f tests/region/CMakeFiles/createclosefocclose.dir/build.make tests/region/CMakeFiles/createclosefocclose.dir/clean
+.PHONY : tests/region/CMakeFiles/createclosefocclose.dir/clean
+
+# clean rule for target.
+clean: tests/region/CMakeFiles/createclosefocclose.dir/clean
+
+.PHONY : clean
+
+#=============================================================================
+# Target rules for target tests/region/CMakeFiles/finddelete.dir
+
+# All Build rule for target.
+tests/region/CMakeFiles/finddelete.dir/all: CMakeFiles/atlas.dir/all
+ $(MAKE) -f tests/region/CMakeFiles/finddelete.dir/build.make tests/region/CMakeFiles/finddelete.dir/depend
+ $(MAKE) -f tests/region/CMakeFiles/finddelete.dir/build.make tests/region/CMakeFiles/finddelete.dir/build
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles --progress-num=46,47 "Built target finddelete"
+.PHONY : tests/region/CMakeFiles/finddelete.dir/all
+
+# Include target in all.
+all: tests/region/CMakeFiles/finddelete.dir/all
+
+.PHONY : all
+
+# Build rule for subdir invocation for target.
+tests/region/CMakeFiles/finddelete.dir/rule: cmake_check_build_system
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 24
+ $(MAKE) -f CMakeFiles/Makefile2 tests/region/CMakeFiles/finddelete.dir/all
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 0
+.PHONY : tests/region/CMakeFiles/finddelete.dir/rule
+
+# Convenience name for target.
+finddelete: tests/region/CMakeFiles/finddelete.dir/rule
+
+.PHONY : finddelete
+
+# clean rule for target.
+tests/region/CMakeFiles/finddelete.dir/clean:
+ $(MAKE) -f tests/region/CMakeFiles/finddelete.dir/build.make tests/region/CMakeFiles/finddelete.dir/clean
+.PHONY : tests/region/CMakeFiles/finddelete.dir/clean
+
+# clean rule for target.
+clean: tests/region/CMakeFiles/finddelete.dir/clean
+
+.PHONY : clean
+
+#=============================================================================
+# Directory level rules for directory tests/data_structures
+
+# Convenience name for "all" pass in the directory.
+tests/data_structures/all: tests/data_structures/CMakeFiles/alarm_clock.dir/all
+tests/data_structures/all: tests/data_structures/CMakeFiles/stores.dir/all
+tests/data_structures/all: tests/data_structures/CMakeFiles/sll_mt.dir/all
+tests/data_structures/all: tests/data_structures/CMakeFiles/sll.dir/all
+tests/data_structures/all: tests/data_structures/CMakeFiles/queue.dir/all
+tests/data_structures/all: tests/data_structures/CMakeFiles/cow_array_list.dir/all
+tests/data_structures/all: tests/data_structures/CMakeFiles/sll_mt_ll.dir/all
+tests/data_structures/all: tests/data_structures/CMakeFiles/sll_ll.dir/all
+tests/data_structures/all: tests/data_structures/CMakeFiles/queue_nvm.dir/all
+tests/data_structures/all: tests/data_structures/CMakeFiles/stores_nvm.dir/all
+tests/data_structures/all: tests/data_structures/CMakeFiles/alarm_clock_nvm.dir/all
+tests/data_structures/all: tests/data_structures/CMakeFiles/cow_array_list_nvm.dir/all
+tests/data_structures/all: tests/data_structures/CMakeFiles/pc_nvm.dir/all
+tests/data_structures/all: tests/data_structures/CMakeFiles/sll_nvm.dir/all
+tests/data_structures/all: tests/data_structures/CMakeFiles/sps_nvm.dir/all
+tests/data_structures/all: tests/data_structures/CMakeFiles/linked_list_nvm.dir/all
+tests/data_structures/all: tests/data_structures/TATP/all
+tests/data_structures/all: tests/data_structures/RB/all
+tests/data_structures/all: tests/data_structures/TPCC/all
+tests/data_structures/all: tests/data_structures/CQ/all
+
+.PHONY : tests/data_structures/all
+
+# Convenience name for "clean" pass in the directory.
+tests/data_structures/clean: tests/data_structures/CMakeFiles/alarm_clock.dir/clean
+tests/data_structures/clean: tests/data_structures/CMakeFiles/stores.dir/clean
+tests/data_structures/clean: tests/data_structures/CMakeFiles/sll_mt.dir/clean
+tests/data_structures/clean: tests/data_structures/CMakeFiles/sll.dir/clean
+tests/data_structures/clean: tests/data_structures/CMakeFiles/queue.dir/clean
+tests/data_structures/clean: tests/data_structures/CMakeFiles/cow_array_list.dir/clean
+tests/data_structures/clean: tests/data_structures/CMakeFiles/sll_mt_ll.dir/clean
+tests/data_structures/clean: tests/data_structures/CMakeFiles/sll_ll.dir/clean
+tests/data_structures/clean: tests/data_structures/CMakeFiles/queue_nvm.dir/clean
+tests/data_structures/clean: tests/data_structures/CMakeFiles/stores_nvm.dir/clean
+tests/data_structures/clean: tests/data_structures/CMakeFiles/alarm_clock_nvm.dir/clean
+tests/data_structures/clean: tests/data_structures/CMakeFiles/cow_array_list_nvm.dir/clean
+tests/data_structures/clean: tests/data_structures/CMakeFiles/pc_nvm.dir/clean
+tests/data_structures/clean: tests/data_structures/CMakeFiles/sll_nvm.dir/clean
+tests/data_structures/clean: tests/data_structures/CMakeFiles/sps_nvm.dir/clean
+tests/data_structures/clean: tests/data_structures/CMakeFiles/linked_list_nvm.dir/clean
+tests/data_structures/clean: tests/data_structures/TATP/clean
+tests/data_structures/clean: tests/data_structures/RB/clean
+tests/data_structures/clean: tests/data_structures/TPCC/clean
+tests/data_structures/clean: tests/data_structures/CQ/clean
+
+.PHONY : tests/data_structures/clean
+
+# Convenience name for "preinstall" pass in the directory.
+tests/data_structures/preinstall: tests/data_structures/TATP/preinstall
+tests/data_structures/preinstall: tests/data_structures/RB/preinstall
+tests/data_structures/preinstall: tests/data_structures/TPCC/preinstall
+tests/data_structures/preinstall: tests/data_structures/CQ/preinstall
+
+.PHONY : tests/data_structures/preinstall
+
+#=============================================================================
+# Target rules for target tests/data_structures/CMakeFiles/alarm_clock.dir
+
+# All Build rule for target.
+tests/data_structures/CMakeFiles/alarm_clock.dir/all:
+ $(MAKE) -f tests/data_structures/CMakeFiles/alarm_clock.dir/build.make tests/data_structures/CMakeFiles/alarm_clock.dir/depend
+ $(MAKE) -f tests/data_structures/CMakeFiles/alarm_clock.dir/build.make tests/data_structures/CMakeFiles/alarm_clock.dir/build
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles --progress-num=22,23 "Built target alarm_clock"
+.PHONY : tests/data_structures/CMakeFiles/alarm_clock.dir/all
+
+# Include target in all.
+all: tests/data_structures/CMakeFiles/alarm_clock.dir/all
+
+.PHONY : all
+
+# Build rule for subdir invocation for target.
+tests/data_structures/CMakeFiles/alarm_clock.dir/rule: cmake_check_build_system
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 2
+ $(MAKE) -f CMakeFiles/Makefile2 tests/data_structures/CMakeFiles/alarm_clock.dir/all
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 0
+.PHONY : tests/data_structures/CMakeFiles/alarm_clock.dir/rule
+
+# Convenience name for target.
+alarm_clock: tests/data_structures/CMakeFiles/alarm_clock.dir/rule
+
+.PHONY : alarm_clock
+
+# clean rule for target.
+tests/data_structures/CMakeFiles/alarm_clock.dir/clean:
+ $(MAKE) -f tests/data_structures/CMakeFiles/alarm_clock.dir/build.make tests/data_structures/CMakeFiles/alarm_clock.dir/clean
+.PHONY : tests/data_structures/CMakeFiles/alarm_clock.dir/clean
+
+# clean rule for target.
+clean: tests/data_structures/CMakeFiles/alarm_clock.dir/clean
+
+.PHONY : clean
+
+#=============================================================================
+# Target rules for target tests/data_structures/CMakeFiles/stores.dir
+
+# All Build rule for target.
+tests/data_structures/CMakeFiles/stores.dir/all:
+ $(MAKE) -f tests/data_structures/CMakeFiles/stores.dir/build.make tests/data_structures/CMakeFiles/stores.dir/depend
+ $(MAKE) -f tests/data_structures/CMakeFiles/stores.dir/build.make tests/data_structures/CMakeFiles/stores.dir/build
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles --progress-num=81,82 "Built target stores"
+.PHONY : tests/data_structures/CMakeFiles/stores.dir/all
+
+# Include target in all.
+all: tests/data_structures/CMakeFiles/stores.dir/all
+
+.PHONY : all
+
+# Build rule for subdir invocation for target.
+tests/data_structures/CMakeFiles/stores.dir/rule: cmake_check_build_system
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 2
+ $(MAKE) -f CMakeFiles/Makefile2 tests/data_structures/CMakeFiles/stores.dir/all
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 0
+.PHONY : tests/data_structures/CMakeFiles/stores.dir/rule
+
+# Convenience name for target.
+stores: tests/data_structures/CMakeFiles/stores.dir/rule
+
+.PHONY : stores
+
+# clean rule for target.
+tests/data_structures/CMakeFiles/stores.dir/clean:
+ $(MAKE) -f tests/data_structures/CMakeFiles/stores.dir/build.make tests/data_structures/CMakeFiles/stores.dir/clean
+.PHONY : tests/data_structures/CMakeFiles/stores.dir/clean
+
+# clean rule for target.
+clean: tests/data_structures/CMakeFiles/stores.dir/clean
+
+.PHONY : clean
+
+#=============================================================================
+# Target rules for target tests/data_structures/CMakeFiles/sll_mt.dir
+
+# All Build rule for target.
+tests/data_structures/CMakeFiles/sll_mt.dir/all:
+ $(MAKE) -f tests/data_structures/CMakeFiles/sll_mt.dir/build.make tests/data_structures/CMakeFiles/sll_mt.dir/depend
+ $(MAKE) -f tests/data_structures/CMakeFiles/sll_mt.dir/build.make tests/data_structures/CMakeFiles/sll_mt.dir/build
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles --progress-num=73,74 "Built target sll_mt"
+.PHONY : tests/data_structures/CMakeFiles/sll_mt.dir/all
+
+# Include target in all.
+all: tests/data_structures/CMakeFiles/sll_mt.dir/all
+
+.PHONY : all
+
+# Build rule for subdir invocation for target.
+tests/data_structures/CMakeFiles/sll_mt.dir/rule: cmake_check_build_system
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 2
+ $(MAKE) -f CMakeFiles/Makefile2 tests/data_structures/CMakeFiles/sll_mt.dir/all
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 0
+.PHONY : tests/data_structures/CMakeFiles/sll_mt.dir/rule
+
+# Convenience name for target.
+sll_mt: tests/data_structures/CMakeFiles/sll_mt.dir/rule
+
+.PHONY : sll_mt
+
+# clean rule for target.
+tests/data_structures/CMakeFiles/sll_mt.dir/clean:
+ $(MAKE) -f tests/data_structures/CMakeFiles/sll_mt.dir/build.make tests/data_structures/CMakeFiles/sll_mt.dir/clean
+.PHONY : tests/data_structures/CMakeFiles/sll_mt.dir/clean
+
+# clean rule for target.
+clean: tests/data_structures/CMakeFiles/sll_mt.dir/clean
+
+.PHONY : clean
+
+#=============================================================================
+# Target rules for target tests/data_structures/CMakeFiles/sll.dir
+
+# All Build rule for target.
+tests/data_structures/CMakeFiles/sll.dir/all:
+ $(MAKE) -f tests/data_structures/CMakeFiles/sll.dir/build.make tests/data_structures/CMakeFiles/sll.dir/depend
+ $(MAKE) -f tests/data_structures/CMakeFiles/sll.dir/build.make tests/data_structures/CMakeFiles/sll.dir/build
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles --progress-num=69,70 "Built target sll"
+.PHONY : tests/data_structures/CMakeFiles/sll.dir/all
+
+# Include target in all.
+all: tests/data_structures/CMakeFiles/sll.dir/all
+
+.PHONY : all
+
+# Build rule for subdir invocation for target.
+tests/data_structures/CMakeFiles/sll.dir/rule: cmake_check_build_system
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 2
+ $(MAKE) -f CMakeFiles/Makefile2 tests/data_structures/CMakeFiles/sll.dir/all
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 0
+.PHONY : tests/data_structures/CMakeFiles/sll.dir/rule
+
+# Convenience name for target.
+sll: tests/data_structures/CMakeFiles/sll.dir/rule
+
+.PHONY : sll
+
+# clean rule for target.
+tests/data_structures/CMakeFiles/sll.dir/clean:
+ $(MAKE) -f tests/data_structures/CMakeFiles/sll.dir/build.make tests/data_structures/CMakeFiles/sll.dir/clean
+.PHONY : tests/data_structures/CMakeFiles/sll.dir/clean
+
+# clean rule for target.
+clean: tests/data_structures/CMakeFiles/sll.dir/clean
+
+.PHONY : clean
+
+#=============================================================================
+# Target rules for target tests/data_structures/CMakeFiles/queue.dir
+
+# All Build rule for target.
+tests/data_structures/CMakeFiles/queue.dir/all:
+ $(MAKE) -f tests/data_structures/CMakeFiles/queue.dir/build.make tests/data_structures/CMakeFiles/queue.dir/depend
+ $(MAKE) -f tests/data_structures/CMakeFiles/queue.dir/build.make tests/data_structures/CMakeFiles/queue.dir/build
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles --progress-num=60,61 "Built target queue"
+.PHONY : tests/data_structures/CMakeFiles/queue.dir/all
+
+# Include target in all.
+all: tests/data_structures/CMakeFiles/queue.dir/all
+
+.PHONY : all
+
+# Build rule for subdir invocation for target.
+tests/data_structures/CMakeFiles/queue.dir/rule: cmake_check_build_system
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 2
+ $(MAKE) -f CMakeFiles/Makefile2 tests/data_structures/CMakeFiles/queue.dir/all
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 0
+.PHONY : tests/data_structures/CMakeFiles/queue.dir/rule
+
+# Convenience name for target.
+queue: tests/data_structures/CMakeFiles/queue.dir/rule
+
+.PHONY : queue
+
+# clean rule for target.
+tests/data_structures/CMakeFiles/queue.dir/clean:
+ $(MAKE) -f tests/data_structures/CMakeFiles/queue.dir/build.make tests/data_structures/CMakeFiles/queue.dir/clean
+.PHONY : tests/data_structures/CMakeFiles/queue.dir/clean
+
+# clean rule for target.
+clean: tests/data_structures/CMakeFiles/queue.dir/clean
+
+.PHONY : clean
+
+#=============================================================================
+# Target rules for target tests/data_structures/CMakeFiles/cow_array_list.dir
+
+# All Build rule for target.
+tests/data_structures/CMakeFiles/cow_array_list.dir/all:
+ $(MAKE) -f tests/data_structures/CMakeFiles/cow_array_list.dir/build.make tests/data_structures/CMakeFiles/cow_array_list.dir/depend
+ $(MAKE) -f tests/data_structures/CMakeFiles/cow_array_list.dir/build.make tests/data_structures/CMakeFiles/cow_array_list.dir/build
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles --progress-num=29,30 "Built target cow_array_list"
+.PHONY : tests/data_structures/CMakeFiles/cow_array_list.dir/all
+
+# Include target in all.
+all: tests/data_structures/CMakeFiles/cow_array_list.dir/all
+
+.PHONY : all
+
+# Build rule for subdir invocation for target.
+tests/data_structures/CMakeFiles/cow_array_list.dir/rule: cmake_check_build_system
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 2
+ $(MAKE) -f CMakeFiles/Makefile2 tests/data_structures/CMakeFiles/cow_array_list.dir/all
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 0
+.PHONY : tests/data_structures/CMakeFiles/cow_array_list.dir/rule
+
+# Convenience name for target.
+cow_array_list: tests/data_structures/CMakeFiles/cow_array_list.dir/rule
+
+.PHONY : cow_array_list
+
+# clean rule for target.
+tests/data_structures/CMakeFiles/cow_array_list.dir/clean:
+ $(MAKE) -f tests/data_structures/CMakeFiles/cow_array_list.dir/build.make tests/data_structures/CMakeFiles/cow_array_list.dir/clean
+.PHONY : tests/data_structures/CMakeFiles/cow_array_list.dir/clean
+
+# clean rule for target.
+clean: tests/data_structures/CMakeFiles/cow_array_list.dir/clean
+
+.PHONY : clean
+
+#=============================================================================
+# Target rules for target tests/data_structures/CMakeFiles/sll_mt_ll.dir
+
+# All Build rule for target.
+tests/data_structures/CMakeFiles/sll_mt_ll.dir/all: CMakeFiles/atlas.dir/all
+ $(MAKE) -f tests/data_structures/CMakeFiles/sll_mt_ll.dir/build.make tests/data_structures/CMakeFiles/sll_mt_ll.dir/depend
+ $(MAKE) -f tests/data_structures/CMakeFiles/sll_mt_ll.dir/build.make tests/data_structures/CMakeFiles/sll_mt_ll.dir/build
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles --progress-num=75,76 "Built target sll_mt_ll"
+.PHONY : tests/data_structures/CMakeFiles/sll_mt_ll.dir/all
+
+# Include target in all.
+all: tests/data_structures/CMakeFiles/sll_mt_ll.dir/all
+
+.PHONY : all
+
+# Build rule for subdir invocation for target.
+tests/data_structures/CMakeFiles/sll_mt_ll.dir/rule: cmake_check_build_system
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 24
+ $(MAKE) -f CMakeFiles/Makefile2 tests/data_structures/CMakeFiles/sll_mt_ll.dir/all
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 0
+.PHONY : tests/data_structures/CMakeFiles/sll_mt_ll.dir/rule
+
+# Convenience name for target.
+sll_mt_ll: tests/data_structures/CMakeFiles/sll_mt_ll.dir/rule
+
+.PHONY : sll_mt_ll
+
+# clean rule for target.
+tests/data_structures/CMakeFiles/sll_mt_ll.dir/clean:
+ $(MAKE) -f tests/data_structures/CMakeFiles/sll_mt_ll.dir/build.make tests/data_structures/CMakeFiles/sll_mt_ll.dir/clean
+.PHONY : tests/data_structures/CMakeFiles/sll_mt_ll.dir/clean
+
+# clean rule for target.
+clean: tests/data_structures/CMakeFiles/sll_mt_ll.dir/clean
+
+.PHONY : clean
+
+#=============================================================================
+# Target rules for target tests/data_structures/CMakeFiles/sll_ll.dir
+
+# All Build rule for target.
+tests/data_structures/CMakeFiles/sll_ll.dir/all: CMakeFiles/atlas.dir/all
+ $(MAKE) -f tests/data_structures/CMakeFiles/sll_ll.dir/build.make tests/data_structures/CMakeFiles/sll_ll.dir/depend
+ $(MAKE) -f tests/data_structures/CMakeFiles/sll_ll.dir/build.make tests/data_structures/CMakeFiles/sll_ll.dir/build
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles --progress-num=71,72 "Built target sll_ll"
+.PHONY : tests/data_structures/CMakeFiles/sll_ll.dir/all
+
+# Include target in all.
+all: tests/data_structures/CMakeFiles/sll_ll.dir/all
+
+.PHONY : all
+
+# Build rule for subdir invocation for target.
+tests/data_structures/CMakeFiles/sll_ll.dir/rule: cmake_check_build_system
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 24
+ $(MAKE) -f CMakeFiles/Makefile2 tests/data_structures/CMakeFiles/sll_ll.dir/all
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 0
+.PHONY : tests/data_structures/CMakeFiles/sll_ll.dir/rule
+
+# Convenience name for target.
+sll_ll: tests/data_structures/CMakeFiles/sll_ll.dir/rule
+
+.PHONY : sll_ll
+
+# clean rule for target.
+tests/data_structures/CMakeFiles/sll_ll.dir/clean:
+ $(MAKE) -f tests/data_structures/CMakeFiles/sll_ll.dir/build.make tests/data_structures/CMakeFiles/sll_ll.dir/clean
+.PHONY : tests/data_structures/CMakeFiles/sll_ll.dir/clean
+
+# clean rule for target.
+clean: tests/data_structures/CMakeFiles/sll_ll.dir/clean
+
+.PHONY : clean
+
+#=============================================================================
+# Target rules for target tests/data_structures/CMakeFiles/queue_nvm.dir
+
+# All Build rule for target.
+tests/data_structures/CMakeFiles/queue_nvm.dir/all: CMakeFiles/atlas.dir/all
+ $(MAKE) -f tests/data_structures/CMakeFiles/queue_nvm.dir/build.make tests/data_structures/CMakeFiles/queue_nvm.dir/depend
+ $(MAKE) -f tests/data_structures/CMakeFiles/queue_nvm.dir/build.make tests/data_structures/CMakeFiles/queue_nvm.dir/build
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles --progress-num=62,63 "Built target queue_nvm"
+.PHONY : tests/data_structures/CMakeFiles/queue_nvm.dir/all
+
+# Include target in all.
+all: tests/data_structures/CMakeFiles/queue_nvm.dir/all
+
+.PHONY : all
+
+# Build rule for subdir invocation for target.
+tests/data_structures/CMakeFiles/queue_nvm.dir/rule: cmake_check_build_system
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 24
+ $(MAKE) -f CMakeFiles/Makefile2 tests/data_structures/CMakeFiles/queue_nvm.dir/all
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 0
+.PHONY : tests/data_structures/CMakeFiles/queue_nvm.dir/rule
+
+# Convenience name for target.
+queue_nvm: tests/data_structures/CMakeFiles/queue_nvm.dir/rule
+
+.PHONY : queue_nvm
+
+# clean rule for target.
+tests/data_structures/CMakeFiles/queue_nvm.dir/clean:
+ $(MAKE) -f tests/data_structures/CMakeFiles/queue_nvm.dir/build.make tests/data_structures/CMakeFiles/queue_nvm.dir/clean
+.PHONY : tests/data_structures/CMakeFiles/queue_nvm.dir/clean
+
+# clean rule for target.
+clean: tests/data_structures/CMakeFiles/queue_nvm.dir/clean
+
+.PHONY : clean
+
+#=============================================================================
+# Target rules for target tests/data_structures/CMakeFiles/stores_nvm.dir
+
+# All Build rule for target.
+tests/data_structures/CMakeFiles/stores_nvm.dir/all: CMakeFiles/atlas.dir/all
+ $(MAKE) -f tests/data_structures/CMakeFiles/stores_nvm.dir/build.make tests/data_structures/CMakeFiles/stores_nvm.dir/depend
+ $(MAKE) -f tests/data_structures/CMakeFiles/stores_nvm.dir/build.make tests/data_structures/CMakeFiles/stores_nvm.dir/build
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles --progress-num=83,84 "Built target stores_nvm"
+.PHONY : tests/data_structures/CMakeFiles/stores_nvm.dir/all
+
+# Include target in all.
+all: tests/data_structures/CMakeFiles/stores_nvm.dir/all
+
+.PHONY : all
+
+# Build rule for subdir invocation for target.
+tests/data_structures/CMakeFiles/stores_nvm.dir/rule: cmake_check_build_system
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 24
+ $(MAKE) -f CMakeFiles/Makefile2 tests/data_structures/CMakeFiles/stores_nvm.dir/all
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 0
+.PHONY : tests/data_structures/CMakeFiles/stores_nvm.dir/rule
+
+# Convenience name for target.
+stores_nvm: tests/data_structures/CMakeFiles/stores_nvm.dir/rule
+
+.PHONY : stores_nvm
+
+# clean rule for target.
+tests/data_structures/CMakeFiles/stores_nvm.dir/clean:
+ $(MAKE) -f tests/data_structures/CMakeFiles/stores_nvm.dir/build.make tests/data_structures/CMakeFiles/stores_nvm.dir/clean
+.PHONY : tests/data_structures/CMakeFiles/stores_nvm.dir/clean
+
+# clean rule for target.
+clean: tests/data_structures/CMakeFiles/stores_nvm.dir/clean
+
+.PHONY : clean
+
+#=============================================================================
+# Target rules for target tests/data_structures/CMakeFiles/alarm_clock_nvm.dir
+
+# All Build rule for target.
+tests/data_structures/CMakeFiles/alarm_clock_nvm.dir/all: CMakeFiles/atlas.dir/all
+ $(MAKE) -f tests/data_structures/CMakeFiles/alarm_clock_nvm.dir/build.make tests/data_structures/CMakeFiles/alarm_clock_nvm.dir/depend
+ $(MAKE) -f tests/data_structures/CMakeFiles/alarm_clock_nvm.dir/build.make tests/data_structures/CMakeFiles/alarm_clock_nvm.dir/build
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles --progress-num=24,25 "Built target alarm_clock_nvm"
+.PHONY : tests/data_structures/CMakeFiles/alarm_clock_nvm.dir/all
+
+# Include target in all.
+all: tests/data_structures/CMakeFiles/alarm_clock_nvm.dir/all
+
+.PHONY : all
+
+# Build rule for subdir invocation for target.
+tests/data_structures/CMakeFiles/alarm_clock_nvm.dir/rule: cmake_check_build_system
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 24
+ $(MAKE) -f CMakeFiles/Makefile2 tests/data_structures/CMakeFiles/alarm_clock_nvm.dir/all
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 0
+.PHONY : tests/data_structures/CMakeFiles/alarm_clock_nvm.dir/rule
+
+# Convenience name for target.
+alarm_clock_nvm: tests/data_structures/CMakeFiles/alarm_clock_nvm.dir/rule
+
+.PHONY : alarm_clock_nvm
+
+# clean rule for target.
+tests/data_structures/CMakeFiles/alarm_clock_nvm.dir/clean:
+ $(MAKE) -f tests/data_structures/CMakeFiles/alarm_clock_nvm.dir/build.make tests/data_structures/CMakeFiles/alarm_clock_nvm.dir/clean
+.PHONY : tests/data_structures/CMakeFiles/alarm_clock_nvm.dir/clean
+
+# clean rule for target.
+clean: tests/data_structures/CMakeFiles/alarm_clock_nvm.dir/clean
+
+.PHONY : clean
+
+#=============================================================================
+# Target rules for target tests/data_structures/CMakeFiles/cow_array_list_nvm.dir
+
+# All Build rule for target.
+tests/data_structures/CMakeFiles/cow_array_list_nvm.dir/all: CMakeFiles/atlas.dir/all
+ $(MAKE) -f tests/data_structures/CMakeFiles/cow_array_list_nvm.dir/build.make tests/data_structures/CMakeFiles/cow_array_list_nvm.dir/depend
+ $(MAKE) -f tests/data_structures/CMakeFiles/cow_array_list_nvm.dir/build.make tests/data_structures/CMakeFiles/cow_array_list_nvm.dir/build
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles --progress-num=31,32 "Built target cow_array_list_nvm"
+.PHONY : tests/data_structures/CMakeFiles/cow_array_list_nvm.dir/all
+
+# Include target in all.
+all: tests/data_structures/CMakeFiles/cow_array_list_nvm.dir/all
+
+.PHONY : all
+
+# Build rule for subdir invocation for target.
+tests/data_structures/CMakeFiles/cow_array_list_nvm.dir/rule: cmake_check_build_system
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 24
+ $(MAKE) -f CMakeFiles/Makefile2 tests/data_structures/CMakeFiles/cow_array_list_nvm.dir/all
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 0
+.PHONY : tests/data_structures/CMakeFiles/cow_array_list_nvm.dir/rule
+
+# Convenience name for target.
+cow_array_list_nvm: tests/data_structures/CMakeFiles/cow_array_list_nvm.dir/rule
+
+.PHONY : cow_array_list_nvm
+
+# clean rule for target.
+tests/data_structures/CMakeFiles/cow_array_list_nvm.dir/clean:
+ $(MAKE) -f tests/data_structures/CMakeFiles/cow_array_list_nvm.dir/build.make tests/data_structures/CMakeFiles/cow_array_list_nvm.dir/clean
+.PHONY : tests/data_structures/CMakeFiles/cow_array_list_nvm.dir/clean
+
+# clean rule for target.
+clean: tests/data_structures/CMakeFiles/cow_array_list_nvm.dir/clean
+
+.PHONY : clean
+
+#=============================================================================
+# Target rules for target tests/data_structures/CMakeFiles/pc_nvm.dir
+
+# All Build rule for target.
+tests/data_structures/CMakeFiles/pc_nvm.dir/all: CMakeFiles/atlas.dir/all
+ $(MAKE) -f tests/data_structures/CMakeFiles/pc_nvm.dir/build.make tests/data_structures/CMakeFiles/pc_nvm.dir/depend
+ $(MAKE) -f tests/data_structures/CMakeFiles/pc_nvm.dir/build.make tests/data_structures/CMakeFiles/pc_nvm.dir/build
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles --progress-num=58,59 "Built target pc_nvm"
+.PHONY : tests/data_structures/CMakeFiles/pc_nvm.dir/all
+
+# Include target in all.
+all: tests/data_structures/CMakeFiles/pc_nvm.dir/all
+
+.PHONY : all
+
+# Build rule for subdir invocation for target.
+tests/data_structures/CMakeFiles/pc_nvm.dir/rule: cmake_check_build_system
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 24
+ $(MAKE) -f CMakeFiles/Makefile2 tests/data_structures/CMakeFiles/pc_nvm.dir/all
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 0
+.PHONY : tests/data_structures/CMakeFiles/pc_nvm.dir/rule
+
+# Convenience name for target.
+pc_nvm: tests/data_structures/CMakeFiles/pc_nvm.dir/rule
+
+.PHONY : pc_nvm
+
+# clean rule for target.
+tests/data_structures/CMakeFiles/pc_nvm.dir/clean:
+ $(MAKE) -f tests/data_structures/CMakeFiles/pc_nvm.dir/build.make tests/data_structures/CMakeFiles/pc_nvm.dir/clean
+.PHONY : tests/data_structures/CMakeFiles/pc_nvm.dir/clean
+
+# clean rule for target.
+clean: tests/data_structures/CMakeFiles/pc_nvm.dir/clean
+
+.PHONY : clean
+
+#=============================================================================
+# Target rules for target tests/data_structures/CMakeFiles/sll_nvm.dir
+
+# All Build rule for target.
+tests/data_structures/CMakeFiles/sll_nvm.dir/all: CMakeFiles/atlas.dir/all
+ $(MAKE) -f tests/data_structures/CMakeFiles/sll_nvm.dir/build.make tests/data_structures/CMakeFiles/sll_nvm.dir/depend
+ $(MAKE) -f tests/data_structures/CMakeFiles/sll_nvm.dir/build.make tests/data_structures/CMakeFiles/sll_nvm.dir/build
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles --progress-num=77,78 "Built target sll_nvm"
+.PHONY : tests/data_structures/CMakeFiles/sll_nvm.dir/all
+
+# Include target in all.
+all: tests/data_structures/CMakeFiles/sll_nvm.dir/all
+
+.PHONY : all
+
+# Build rule for subdir invocation for target.
+tests/data_structures/CMakeFiles/sll_nvm.dir/rule: cmake_check_build_system
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 24
+ $(MAKE) -f CMakeFiles/Makefile2 tests/data_structures/CMakeFiles/sll_nvm.dir/all
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 0
+.PHONY : tests/data_structures/CMakeFiles/sll_nvm.dir/rule
+
+# Convenience name for target.
+sll_nvm: tests/data_structures/CMakeFiles/sll_nvm.dir/rule
+
+.PHONY : sll_nvm
+
+# clean rule for target.
+tests/data_structures/CMakeFiles/sll_nvm.dir/clean:
+ $(MAKE) -f tests/data_structures/CMakeFiles/sll_nvm.dir/build.make tests/data_structures/CMakeFiles/sll_nvm.dir/clean
+.PHONY : tests/data_structures/CMakeFiles/sll_nvm.dir/clean
+
+# clean rule for target.
+clean: tests/data_structures/CMakeFiles/sll_nvm.dir/clean
+
+.PHONY : clean
+
+#=============================================================================
+# Target rules for target tests/data_structures/CMakeFiles/sps_nvm.dir
+
+# All Build rule for target.
+tests/data_structures/CMakeFiles/sps_nvm.dir/all: CMakeFiles/atlas.dir/all
+ $(MAKE) -f tests/data_structures/CMakeFiles/sps_nvm.dir/build.make tests/data_structures/CMakeFiles/sps_nvm.dir/depend
+ $(MAKE) -f tests/data_structures/CMakeFiles/sps_nvm.dir/build.make tests/data_structures/CMakeFiles/sps_nvm.dir/build
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles --progress-num=79,80 "Built target sps_nvm"
+.PHONY : tests/data_structures/CMakeFiles/sps_nvm.dir/all
+
+# Include target in all.
+all: tests/data_structures/CMakeFiles/sps_nvm.dir/all
+
+.PHONY : all
+
+# Build rule for subdir invocation for target.
+tests/data_structures/CMakeFiles/sps_nvm.dir/rule: cmake_check_build_system
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 24
+ $(MAKE) -f CMakeFiles/Makefile2 tests/data_structures/CMakeFiles/sps_nvm.dir/all
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 0
+.PHONY : tests/data_structures/CMakeFiles/sps_nvm.dir/rule
+
+# Convenience name for target.
+sps_nvm: tests/data_structures/CMakeFiles/sps_nvm.dir/rule
+
+.PHONY : sps_nvm
+
+# clean rule for target.
+tests/data_structures/CMakeFiles/sps_nvm.dir/clean:
+ $(MAKE) -f tests/data_structures/CMakeFiles/sps_nvm.dir/build.make tests/data_structures/CMakeFiles/sps_nvm.dir/clean
+.PHONY : tests/data_structures/CMakeFiles/sps_nvm.dir/clean
+
+# clean rule for target.
+clean: tests/data_structures/CMakeFiles/sps_nvm.dir/clean
+
+.PHONY : clean
+
+#=============================================================================
+# Target rules for target tests/data_structures/CMakeFiles/linked_list_nvm.dir
+
+# All Build rule for target.
+tests/data_structures/CMakeFiles/linked_list_nvm.dir/all: CMakeFiles/atlas.dir/all
+ $(MAKE) -f tests/data_structures/CMakeFiles/linked_list_nvm.dir/build.make tests/data_structures/CMakeFiles/linked_list_nvm.dir/depend
+ $(MAKE) -f tests/data_structures/CMakeFiles/linked_list_nvm.dir/build.make tests/data_structures/CMakeFiles/linked_list_nvm.dir/build
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles --progress-num=52,53 "Built target linked_list_nvm"
+.PHONY : tests/data_structures/CMakeFiles/linked_list_nvm.dir/all
+
+# Include target in all.
+all: tests/data_structures/CMakeFiles/linked_list_nvm.dir/all
+
+.PHONY : all
+
+# Build rule for subdir invocation for target.
+tests/data_structures/CMakeFiles/linked_list_nvm.dir/rule: cmake_check_build_system
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 24
+ $(MAKE) -f CMakeFiles/Makefile2 tests/data_structures/CMakeFiles/linked_list_nvm.dir/all
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 0
+.PHONY : tests/data_structures/CMakeFiles/linked_list_nvm.dir/rule
+
+# Convenience name for target.
+linked_list_nvm: tests/data_structures/CMakeFiles/linked_list_nvm.dir/rule
+
+.PHONY : linked_list_nvm
+
+# clean rule for target.
+tests/data_structures/CMakeFiles/linked_list_nvm.dir/clean:
+ $(MAKE) -f tests/data_structures/CMakeFiles/linked_list_nvm.dir/build.make tests/data_structures/CMakeFiles/linked_list_nvm.dir/clean
+.PHONY : tests/data_structures/CMakeFiles/linked_list_nvm.dir/clean
+
+# clean rule for target.
+clean: tests/data_structures/CMakeFiles/linked_list_nvm.dir/clean
+
+.PHONY : clean
+
+#=============================================================================
+# Directory level rules for directory tests/data_structures/TATP
+
+# Convenience name for "all" pass in the directory.
+tests/data_structures/TATP/all: tests/data_structures/TATP/CMakeFiles/tatp_nvm.dir/all
+
+.PHONY : tests/data_structures/TATP/all
+
+# Convenience name for "clean" pass in the directory.
+tests/data_structures/TATP/clean: tests/data_structures/TATP/CMakeFiles/tatp_nvm.dir/clean
+
+.PHONY : tests/data_structures/TATP/clean
+
+# Convenience name for "preinstall" pass in the directory.
+tests/data_structures/TATP/preinstall:
+
+.PHONY : tests/data_structures/TATP/preinstall
+
+#=============================================================================
+# Target rules for target tests/data_structures/TATP/CMakeFiles/tatp_nvm.dir
+
+# All Build rule for target.
+tests/data_structures/TATP/CMakeFiles/tatp_nvm.dir/all: CMakeFiles/atlas.dir/all
+ $(MAKE) -f tests/data_structures/TATP/CMakeFiles/tatp_nvm.dir/build.make tests/data_structures/TATP/CMakeFiles/tatp_nvm.dir/depend
+ $(MAKE) -f tests/data_structures/TATP/CMakeFiles/tatp_nvm.dir/build.make tests/data_structures/TATP/CMakeFiles/tatp_nvm.dir/build
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles --progress-num=85,86,87 "Built target tatp_nvm"
+.PHONY : tests/data_structures/TATP/CMakeFiles/tatp_nvm.dir/all
+
+# Include target in all.
+all: tests/data_structures/TATP/CMakeFiles/tatp_nvm.dir/all
+
+.PHONY : all
+
+# Build rule for subdir invocation for target.
+tests/data_structures/TATP/CMakeFiles/tatp_nvm.dir/rule: cmake_check_build_system
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 25
+ $(MAKE) -f CMakeFiles/Makefile2 tests/data_structures/TATP/CMakeFiles/tatp_nvm.dir/all
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 0
+.PHONY : tests/data_structures/TATP/CMakeFiles/tatp_nvm.dir/rule
+
+# Convenience name for target.
+tatp_nvm: tests/data_structures/TATP/CMakeFiles/tatp_nvm.dir/rule
+
+.PHONY : tatp_nvm
+
+# clean rule for target.
+tests/data_structures/TATP/CMakeFiles/tatp_nvm.dir/clean:
+ $(MAKE) -f tests/data_structures/TATP/CMakeFiles/tatp_nvm.dir/build.make tests/data_structures/TATP/CMakeFiles/tatp_nvm.dir/clean
+.PHONY : tests/data_structures/TATP/CMakeFiles/tatp_nvm.dir/clean
+
+# clean rule for target.
+clean: tests/data_structures/TATP/CMakeFiles/tatp_nvm.dir/clean
+
+.PHONY : clean
+
+#=============================================================================
+# Directory level rules for directory tests/data_structures/RB
+
+# Convenience name for "all" pass in the directory.
+tests/data_structures/RB/all: tests/data_structures/RB/CMakeFiles/rb_nvm.dir/all
+
+.PHONY : tests/data_structures/RB/all
+
+# Convenience name for "clean" pass in the directory.
+tests/data_structures/RB/clean: tests/data_structures/RB/CMakeFiles/rb_nvm.dir/clean
+
+.PHONY : tests/data_structures/RB/clean
+
+# Convenience name for "preinstall" pass in the directory.
+tests/data_structures/RB/preinstall:
+
+.PHONY : tests/data_structures/RB/preinstall
+
+#=============================================================================
+# Target rules for target tests/data_structures/RB/CMakeFiles/rb_nvm.dir
+
+# All Build rule for target.
+tests/data_structures/RB/CMakeFiles/rb_nvm.dir/all: CMakeFiles/atlas.dir/all
+ $(MAKE) -f tests/data_structures/RB/CMakeFiles/rb_nvm.dir/build.make tests/data_structures/RB/CMakeFiles/rb_nvm.dir/depend
+ $(MAKE) -f tests/data_structures/RB/CMakeFiles/rb_nvm.dir/build.make tests/data_structures/RB/CMakeFiles/rb_nvm.dir/build
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles --progress-num=64,65,66 "Built target rb_nvm"
+.PHONY : tests/data_structures/RB/CMakeFiles/rb_nvm.dir/all
+
+# Include target in all.
+all: tests/data_structures/RB/CMakeFiles/rb_nvm.dir/all
+
+.PHONY : all
+
+# Build rule for subdir invocation for target.
+tests/data_structures/RB/CMakeFiles/rb_nvm.dir/rule: cmake_check_build_system
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 25
+ $(MAKE) -f CMakeFiles/Makefile2 tests/data_structures/RB/CMakeFiles/rb_nvm.dir/all
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 0
+.PHONY : tests/data_structures/RB/CMakeFiles/rb_nvm.dir/rule
+
+# Convenience name for target.
+rb_nvm: tests/data_structures/RB/CMakeFiles/rb_nvm.dir/rule
+
+.PHONY : rb_nvm
+
+# clean rule for target.
+tests/data_structures/RB/CMakeFiles/rb_nvm.dir/clean:
+ $(MAKE) -f tests/data_structures/RB/CMakeFiles/rb_nvm.dir/build.make tests/data_structures/RB/CMakeFiles/rb_nvm.dir/clean
+.PHONY : tests/data_structures/RB/CMakeFiles/rb_nvm.dir/clean
+
+# clean rule for target.
+clean: tests/data_structures/RB/CMakeFiles/rb_nvm.dir/clean
+
+.PHONY : clean
+
+#=============================================================================
+# Directory level rules for directory tests/data_structures/TPCC
+
+# Convenience name for "all" pass in the directory.
+tests/data_structures/TPCC/all: tests/data_structures/TPCC/CMakeFiles/tpcc_nvm.dir/all
+
+.PHONY : tests/data_structures/TPCC/all
+
+# Convenience name for "clean" pass in the directory.
+tests/data_structures/TPCC/clean: tests/data_structures/TPCC/CMakeFiles/tpcc_nvm.dir/clean
+
+.PHONY : tests/data_structures/TPCC/clean
+
+# Convenience name for "preinstall" pass in the directory.
+tests/data_structures/TPCC/preinstall:
+
+.PHONY : tests/data_structures/TPCC/preinstall
+
+#=============================================================================
+# Target rules for target tests/data_structures/TPCC/CMakeFiles/tpcc_nvm.dir
+
+# All Build rule for target.
+tests/data_structures/TPCC/CMakeFiles/tpcc_nvm.dir/all: CMakeFiles/atlas.dir/all
+ $(MAKE) -f tests/data_structures/TPCC/CMakeFiles/tpcc_nvm.dir/build.make tests/data_structures/TPCC/CMakeFiles/tpcc_nvm.dir/depend
+ $(MAKE) -f tests/data_structures/TPCC/CMakeFiles/tpcc_nvm.dir/build.make tests/data_structures/TPCC/CMakeFiles/tpcc_nvm.dir/build
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles --progress-num=88,89,90 "Built target tpcc_nvm"
+.PHONY : tests/data_structures/TPCC/CMakeFiles/tpcc_nvm.dir/all
+
+# Include target in all.
+all: tests/data_structures/TPCC/CMakeFiles/tpcc_nvm.dir/all
+
+.PHONY : all
+
+# Build rule for subdir invocation for target.
+tests/data_structures/TPCC/CMakeFiles/tpcc_nvm.dir/rule: cmake_check_build_system
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 25
+ $(MAKE) -f CMakeFiles/Makefile2 tests/data_structures/TPCC/CMakeFiles/tpcc_nvm.dir/all
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 0
+.PHONY : tests/data_structures/TPCC/CMakeFiles/tpcc_nvm.dir/rule
+
+# Convenience name for target.
+tpcc_nvm: tests/data_structures/TPCC/CMakeFiles/tpcc_nvm.dir/rule
+
+.PHONY : tpcc_nvm
+
+# clean rule for target.
+tests/data_structures/TPCC/CMakeFiles/tpcc_nvm.dir/clean:
+ $(MAKE) -f tests/data_structures/TPCC/CMakeFiles/tpcc_nvm.dir/build.make tests/data_structures/TPCC/CMakeFiles/tpcc_nvm.dir/clean
+.PHONY : tests/data_structures/TPCC/CMakeFiles/tpcc_nvm.dir/clean
+
+# clean rule for target.
+clean: tests/data_structures/TPCC/CMakeFiles/tpcc_nvm.dir/clean
+
+.PHONY : clean
+
+#=============================================================================
+# Directory level rules for directory tests/data_structures/CQ
+
+# Convenience name for "all" pass in the directory.
+tests/data_structures/CQ/all: tests/data_structures/CQ/CMakeFiles/cq_nvm.dir/all
+
+.PHONY : tests/data_structures/CQ/all
+
+# Convenience name for "clean" pass in the directory.
+tests/data_structures/CQ/clean: tests/data_structures/CQ/CMakeFiles/cq_nvm.dir/clean
+
+.PHONY : tests/data_structures/CQ/clean
+
+# Convenience name for "preinstall" pass in the directory.
+tests/data_structures/CQ/preinstall:
+
+.PHONY : tests/data_structures/CQ/preinstall
+
+#=============================================================================
+# Target rules for target tests/data_structures/CQ/CMakeFiles/cq_nvm.dir
+
+# All Build rule for target.
+tests/data_structures/CQ/CMakeFiles/cq_nvm.dir/all: CMakeFiles/atlas.dir/all
+ $(MAKE) -f tests/data_structures/CQ/CMakeFiles/cq_nvm.dir/build.make tests/data_structures/CQ/CMakeFiles/cq_nvm.dir/depend
+ $(MAKE) -f tests/data_structures/CQ/CMakeFiles/cq_nvm.dir/build.make tests/data_structures/CQ/CMakeFiles/cq_nvm.dir/build
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles --progress-num=33,34,35 "Built target cq_nvm"
+.PHONY : tests/data_structures/CQ/CMakeFiles/cq_nvm.dir/all
+
+# Include target in all.
+all: tests/data_structures/CQ/CMakeFiles/cq_nvm.dir/all
+
+.PHONY : all
+
+# Build rule for subdir invocation for target.
+tests/data_structures/CQ/CMakeFiles/cq_nvm.dir/rule: cmake_check_build_system
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 25
+ $(MAKE) -f CMakeFiles/Makefile2 tests/data_structures/CQ/CMakeFiles/cq_nvm.dir/all
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 0
+.PHONY : tests/data_structures/CQ/CMakeFiles/cq_nvm.dir/rule
+
+# Convenience name for target.
+cq_nvm: tests/data_structures/CQ/CMakeFiles/cq_nvm.dir/rule
+
+.PHONY : cq_nvm
+
+# clean rule for target.
+tests/data_structures/CQ/CMakeFiles/cq_nvm.dir/clean:
+ $(MAKE) -f tests/data_structures/CQ/CMakeFiles/cq_nvm.dir/build.make tests/data_structures/CQ/CMakeFiles/cq_nvm.dir/clean
+.PHONY : tests/data_structures/CQ/CMakeFiles/cq_nvm.dir/clean
+
+# clean rule for target.
+clean: tests/data_structures/CQ/CMakeFiles/cq_nvm.dir/clean
+
+.PHONY : clean
+
+#=============================================================================
+# Directory level rules for directory tests/consistency
+
+# Convenience name for "all" pass in the directory.
+tests/consistency/all: tests/consistency/CMakeFiles/malloc_free_test.dir/all
+
+.PHONY : tests/consistency/all
+
+# Convenience name for "clean" pass in the directory.
+tests/consistency/clean: tests/consistency/CMakeFiles/malloc_free_test.dir/clean
+
+.PHONY : tests/consistency/clean
+
+# Convenience name for "preinstall" pass in the directory.
+tests/consistency/preinstall:
+
+.PHONY : tests/consistency/preinstall
+
+#=============================================================================
+# Target rules for target tests/consistency/CMakeFiles/malloc_free_test.dir
+
+# All Build rule for target.
+tests/consistency/CMakeFiles/malloc_free_test.dir/all: CMakeFiles/atlas.dir/all
+ $(MAKE) -f tests/consistency/CMakeFiles/malloc_free_test.dir/build.make tests/consistency/CMakeFiles/malloc_free_test.dir/depend
+ $(MAKE) -f tests/consistency/CMakeFiles/malloc_free_test.dir/build.make tests/consistency/CMakeFiles/malloc_free_test.dir/build
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles --progress-num=54,55 "Built target malloc_free_test"
+.PHONY : tests/consistency/CMakeFiles/malloc_free_test.dir/all
+
+# Include target in all.
+all: tests/consistency/CMakeFiles/malloc_free_test.dir/all
+
+.PHONY : all
+
+# Build rule for subdir invocation for target.
+tests/consistency/CMakeFiles/malloc_free_test.dir/rule: cmake_check_build_system
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 24
+ $(MAKE) -f CMakeFiles/Makefile2 tests/consistency/CMakeFiles/malloc_free_test.dir/all
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 0
+.PHONY : tests/consistency/CMakeFiles/malloc_free_test.dir/rule
+
+# Convenience name for target.
+malloc_free_test: tests/consistency/CMakeFiles/malloc_free_test.dir/rule
+
+.PHONY : malloc_free_test
+
+# clean rule for target.
+tests/consistency/CMakeFiles/malloc_free_test.dir/clean:
+ $(MAKE) -f tests/consistency/CMakeFiles/malloc_free_test.dir/build.make tests/consistency/CMakeFiles/malloc_free_test.dir/clean
+.PHONY : tests/consistency/CMakeFiles/malloc_free_test.dir/clean
+
+# clean rule for target.
+clean: tests/consistency/CMakeFiles/malloc_free_test.dir/clean
+
+.PHONY : clean
+
+#=============================================================================
+# Directory level rules for directory tests/pmalloc
+
+# Convenience name for "all" pass in the directory.
+tests/pmalloc/all: tests/pmalloc/CMakeFiles/new_delete.dir/all
+
+.PHONY : tests/pmalloc/all
+
+# Convenience name for "clean" pass in the directory.
+tests/pmalloc/clean: tests/pmalloc/CMakeFiles/new_delete.dir/clean
+
+.PHONY : tests/pmalloc/clean
+
+# Convenience name for "preinstall" pass in the directory.
+tests/pmalloc/preinstall:
+
+.PHONY : tests/pmalloc/preinstall
+
+#=============================================================================
+# Target rules for target tests/pmalloc/CMakeFiles/new_delete.dir
+
+# All Build rule for target.
+tests/pmalloc/CMakeFiles/new_delete.dir/all: CMakeFiles/atlas.dir/all
+ $(MAKE) -f tests/pmalloc/CMakeFiles/new_delete.dir/build.make tests/pmalloc/CMakeFiles/new_delete.dir/depend
+ $(MAKE) -f tests/pmalloc/CMakeFiles/new_delete.dir/build.make tests/pmalloc/CMakeFiles/new_delete.dir/build
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles --progress-num=56,57 "Built target new_delete"
+.PHONY : tests/pmalloc/CMakeFiles/new_delete.dir/all
+
+# Include target in all.
+all: tests/pmalloc/CMakeFiles/new_delete.dir/all
+
+.PHONY : all
+
+# Build rule for subdir invocation for target.
+tests/pmalloc/CMakeFiles/new_delete.dir/rule: cmake_check_build_system
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 24
+ $(MAKE) -f CMakeFiles/Makefile2 tests/pmalloc/CMakeFiles/new_delete.dir/all
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 0
+.PHONY : tests/pmalloc/CMakeFiles/new_delete.dir/rule
+
+# Convenience name for target.
+new_delete: tests/pmalloc/CMakeFiles/new_delete.dir/rule
+
+.PHONY : new_delete
+
+# clean rule for target.
+tests/pmalloc/CMakeFiles/new_delete.dir/clean:
+ $(MAKE) -f tests/pmalloc/CMakeFiles/new_delete.dir/build.make tests/pmalloc/CMakeFiles/new_delete.dir/clean
+.PHONY : tests/pmalloc/CMakeFiles/new_delete.dir/clean
+
+# clean rule for target.
+clean: tests/pmalloc/CMakeFiles/new_delete.dir/clean
+
+.PHONY : clean
+
+#=============================================================================
+# Directory level rules for directory src
+
+# Convenience name for "all" pass in the directory.
+src/all: src/cache_flush/all
+src/all: src/consistency/all
+src/all: src/logger/all
+src/all: src/util/all
+src/all: src/pmalloc/all
+src/all: src/pregion_mgr/all
+src/all: src/recover/all
+
+.PHONY : src/all
+
+# Convenience name for "clean" pass in the directory.
+src/clean: src/cache_flush/clean
+src/clean: src/consistency/clean
+src/clean: src/logger/clean
+src/clean: src/util/clean
+src/clean: src/pmalloc/clean
+src/clean: src/pregion_mgr/clean
+src/clean: src/recover/clean
+
+.PHONY : src/clean
+
+# Convenience name for "preinstall" pass in the directory.
+src/preinstall: src/cache_flush/preinstall
+src/preinstall: src/consistency/preinstall
+src/preinstall: src/logger/preinstall
+src/preinstall: src/util/preinstall
+src/preinstall: src/pmalloc/preinstall
+src/preinstall: src/pregion_mgr/preinstall
+src/preinstall: src/recover/preinstall
+
+.PHONY : src/preinstall
+
+#=============================================================================
+# Directory level rules for directory src/cache_flush
+
+# Convenience name for "all" pass in the directory.
+src/cache_flush/all: src/cache_flush/CMakeFiles/Cache_flush.dir/all
+
+.PHONY : src/cache_flush/all
+
+# Convenience name for "clean" pass in the directory.
+src/cache_flush/clean: src/cache_flush/CMakeFiles/Cache_flush.dir/clean
+
+.PHONY : src/cache_flush/clean
+
+# Convenience name for "preinstall" pass in the directory.
+src/cache_flush/preinstall:
+
+.PHONY : src/cache_flush/preinstall
+
+#=============================================================================
+# Target rules for target src/cache_flush/CMakeFiles/Cache_flush.dir
+
+# All Build rule for target.
+src/cache_flush/CMakeFiles/Cache_flush.dir/all:
+ $(MAKE) -f src/cache_flush/CMakeFiles/Cache_flush.dir/build.make src/cache_flush/CMakeFiles/Cache_flush.dir/depend
+ $(MAKE) -f src/cache_flush/CMakeFiles/Cache_flush.dir/build.make src/cache_flush/CMakeFiles/Cache_flush.dir/build
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles --progress-num=1,2,3 "Built target Cache_flush"
+.PHONY : src/cache_flush/CMakeFiles/Cache_flush.dir/all
+
+# Include target in all.
+all: src/cache_flush/CMakeFiles/Cache_flush.dir/all
+
+.PHONY : all
+
+# Build rule for subdir invocation for target.
+src/cache_flush/CMakeFiles/Cache_flush.dir/rule: cmake_check_build_system
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 3
+ $(MAKE) -f CMakeFiles/Makefile2 src/cache_flush/CMakeFiles/Cache_flush.dir/all
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 0
+.PHONY : src/cache_flush/CMakeFiles/Cache_flush.dir/rule
+
+# Convenience name for target.
+Cache_flush: src/cache_flush/CMakeFiles/Cache_flush.dir/rule
+
+.PHONY : Cache_flush
+
+# clean rule for target.
+src/cache_flush/CMakeFiles/Cache_flush.dir/clean:
+ $(MAKE) -f src/cache_flush/CMakeFiles/Cache_flush.dir/build.make src/cache_flush/CMakeFiles/Cache_flush.dir/clean
+.PHONY : src/cache_flush/CMakeFiles/Cache_flush.dir/clean
+
+# clean rule for target.
+clean: src/cache_flush/CMakeFiles/Cache_flush.dir/clean
+
+.PHONY : clean
+
+#=============================================================================
+# Directory level rules for directory src/consistency
+
+# Convenience name for "all" pass in the directory.
+src/consistency/all: src/consistency/CMakeFiles/Consistency.dir/all
+
+.PHONY : src/consistency/all
+
+# Convenience name for "clean" pass in the directory.
+src/consistency/clean: src/consistency/CMakeFiles/Consistency.dir/clean
+
+.PHONY : src/consistency/clean
+
+# Convenience name for "preinstall" pass in the directory.
+src/consistency/preinstall:
+
+.PHONY : src/consistency/preinstall
+
+#=============================================================================
+# Target rules for target src/consistency/CMakeFiles/Consistency.dir
+
+# All Build rule for target.
+src/consistency/CMakeFiles/Consistency.dir/all:
+ $(MAKE) -f src/consistency/CMakeFiles/Consistency.dir/build.make src/consistency/CMakeFiles/Consistency.dir/depend
+ $(MAKE) -f src/consistency/CMakeFiles/Consistency.dir/build.make src/consistency/CMakeFiles/Consistency.dir/build
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles --progress-num=4,5,6,7,8 "Built target Consistency"
+.PHONY : src/consistency/CMakeFiles/Consistency.dir/all
+
+# Include target in all.
+all: src/consistency/CMakeFiles/Consistency.dir/all
+
+.PHONY : all
+
+# Build rule for subdir invocation for target.
+src/consistency/CMakeFiles/Consistency.dir/rule: cmake_check_build_system
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 5
+ $(MAKE) -f CMakeFiles/Makefile2 src/consistency/CMakeFiles/Consistency.dir/all
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 0
+.PHONY : src/consistency/CMakeFiles/Consistency.dir/rule
+
+# Convenience name for target.
+Consistency: src/consistency/CMakeFiles/Consistency.dir/rule
+
+.PHONY : Consistency
+
+# clean rule for target.
+src/consistency/CMakeFiles/Consistency.dir/clean:
+ $(MAKE) -f src/consistency/CMakeFiles/Consistency.dir/build.make src/consistency/CMakeFiles/Consistency.dir/clean
+.PHONY : src/consistency/CMakeFiles/Consistency.dir/clean
+
+# clean rule for target.
+clean: src/consistency/CMakeFiles/Consistency.dir/clean
+
+.PHONY : clean
+
+#=============================================================================
+# Directory level rules for directory src/logger
+
+# Convenience name for "all" pass in the directory.
+src/logger/all: src/logger/CMakeFiles/Logger.dir/all
+
+.PHONY : src/logger/all
+
+# Convenience name for "clean" pass in the directory.
+src/logger/clean: src/logger/CMakeFiles/Logger.dir/clean
+
+.PHONY : src/logger/clean
+
+# Convenience name for "preinstall" pass in the directory.
+src/logger/preinstall:
+
+.PHONY : src/logger/preinstall
+
+#=============================================================================
+# Target rules for target src/logger/CMakeFiles/Logger.dir
+
+# All Build rule for target.
+src/logger/CMakeFiles/Logger.dir/all:
+ $(MAKE) -f src/logger/CMakeFiles/Logger.dir/build.make src/logger/CMakeFiles/Logger.dir/depend
+ $(MAKE) -f src/logger/CMakeFiles/Logger.dir/build.make src/logger/CMakeFiles/Logger.dir/build
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles --progress-num=9,10,11,12,13,14,15 "Built target Logger"
+.PHONY : src/logger/CMakeFiles/Logger.dir/all
+
+# Include target in all.
+all: src/logger/CMakeFiles/Logger.dir/all
+
+.PHONY : all
+
+# Build rule for subdir invocation for target.
+src/logger/CMakeFiles/Logger.dir/rule: cmake_check_build_system
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 7
+ $(MAKE) -f CMakeFiles/Makefile2 src/logger/CMakeFiles/Logger.dir/all
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 0
+.PHONY : src/logger/CMakeFiles/Logger.dir/rule
+
+# Convenience name for target.
+Logger: src/logger/CMakeFiles/Logger.dir/rule
+
+.PHONY : Logger
+
+# clean rule for target.
+src/logger/CMakeFiles/Logger.dir/clean:
+ $(MAKE) -f src/logger/CMakeFiles/Logger.dir/build.make src/logger/CMakeFiles/Logger.dir/clean
+.PHONY : src/logger/CMakeFiles/Logger.dir/clean
+
+# clean rule for target.
+clean: src/logger/CMakeFiles/Logger.dir/clean
+
+.PHONY : clean
+
+#=============================================================================
+# Directory level rules for directory src/util
+
+# Convenience name for "all" pass in the directory.
+src/util/all: src/util/CMakeFiles/Util.dir/all
+
+.PHONY : src/util/all
+
+# Convenience name for "clean" pass in the directory.
+src/util/clean: src/util/CMakeFiles/Util.dir/clean
+
+.PHONY : src/util/clean
+
+# Convenience name for "preinstall" pass in the directory.
+src/util/preinstall:
+
+.PHONY : src/util/preinstall
+
+#=============================================================================
+# Target rules for target src/util/CMakeFiles/Util.dir
+
+# All Build rule for target.
+src/util/CMakeFiles/Util.dir/all:
+ $(MAKE) -f src/util/CMakeFiles/Util.dir/build.make src/util/CMakeFiles/Util.dir/depend
+ $(MAKE) -f src/util/CMakeFiles/Util.dir/build.make src/util/CMakeFiles/Util.dir/build
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles --progress-num=20,21 "Built target Util"
+.PHONY : src/util/CMakeFiles/Util.dir/all
+
+# Include target in all.
+all: src/util/CMakeFiles/Util.dir/all
+
+.PHONY : all
+
+# Build rule for subdir invocation for target.
+src/util/CMakeFiles/Util.dir/rule: cmake_check_build_system
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 2
+ $(MAKE) -f CMakeFiles/Makefile2 src/util/CMakeFiles/Util.dir/all
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 0
+.PHONY : src/util/CMakeFiles/Util.dir/rule
+
+# Convenience name for target.
+Util: src/util/CMakeFiles/Util.dir/rule
+
+.PHONY : Util
+
+# clean rule for target.
+src/util/CMakeFiles/Util.dir/clean:
+ $(MAKE) -f src/util/CMakeFiles/Util.dir/build.make src/util/CMakeFiles/Util.dir/clean
+.PHONY : src/util/CMakeFiles/Util.dir/clean
+
+# clean rule for target.
+clean: src/util/CMakeFiles/Util.dir/clean
+
+.PHONY : clean
+
+#=============================================================================
+# Directory level rules for directory src/pmalloc
+
+# Convenience name for "all" pass in the directory.
+src/pmalloc/all: src/pmalloc/CMakeFiles/Pmalloc.dir/all
+
+.PHONY : src/pmalloc/all
+
+# Convenience name for "clean" pass in the directory.
+src/pmalloc/clean: src/pmalloc/CMakeFiles/Pmalloc.dir/clean
+
+.PHONY : src/pmalloc/clean
+
+# Convenience name for "preinstall" pass in the directory.
+src/pmalloc/preinstall:
+
+.PHONY : src/pmalloc/preinstall
+
+#=============================================================================
+# Target rules for target src/pmalloc/CMakeFiles/Pmalloc.dir
+
+# All Build rule for target.
+src/pmalloc/CMakeFiles/Pmalloc.dir/all:
+ $(MAKE) -f src/pmalloc/CMakeFiles/Pmalloc.dir/build.make src/pmalloc/CMakeFiles/Pmalloc.dir/depend
+ $(MAKE) -f src/pmalloc/CMakeFiles/Pmalloc.dir/build.make src/pmalloc/CMakeFiles/Pmalloc.dir/build
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles --progress-num=16,17 "Built target Pmalloc"
+.PHONY : src/pmalloc/CMakeFiles/Pmalloc.dir/all
+
+# Include target in all.
+all: src/pmalloc/CMakeFiles/Pmalloc.dir/all
+
+.PHONY : all
+
+# Build rule for subdir invocation for target.
+src/pmalloc/CMakeFiles/Pmalloc.dir/rule: cmake_check_build_system
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 2
+ $(MAKE) -f CMakeFiles/Makefile2 src/pmalloc/CMakeFiles/Pmalloc.dir/all
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 0
+.PHONY : src/pmalloc/CMakeFiles/Pmalloc.dir/rule
+
+# Convenience name for target.
+Pmalloc: src/pmalloc/CMakeFiles/Pmalloc.dir/rule
+
+.PHONY : Pmalloc
+
+# clean rule for target.
+src/pmalloc/CMakeFiles/Pmalloc.dir/clean:
+ $(MAKE) -f src/pmalloc/CMakeFiles/Pmalloc.dir/build.make src/pmalloc/CMakeFiles/Pmalloc.dir/clean
+.PHONY : src/pmalloc/CMakeFiles/Pmalloc.dir/clean
+
+# clean rule for target.
+clean: src/pmalloc/CMakeFiles/Pmalloc.dir/clean
+
+.PHONY : clean
+
+#=============================================================================
+# Directory level rules for directory src/pregion_mgr
+
+# Convenience name for "all" pass in the directory.
+src/pregion_mgr/all: src/pregion_mgr/CMakeFiles/Pregion_mgr.dir/all
+
+.PHONY : src/pregion_mgr/all
+
+# Convenience name for "clean" pass in the directory.
+src/pregion_mgr/clean: src/pregion_mgr/CMakeFiles/Pregion_mgr.dir/clean
+
+.PHONY : src/pregion_mgr/clean
+
+# Convenience name for "preinstall" pass in the directory.
+src/pregion_mgr/preinstall:
+
+.PHONY : src/pregion_mgr/preinstall
+
+#=============================================================================
+# Target rules for target src/pregion_mgr/CMakeFiles/Pregion_mgr.dir
+
+# All Build rule for target.
+src/pregion_mgr/CMakeFiles/Pregion_mgr.dir/all:
+ $(MAKE) -f src/pregion_mgr/CMakeFiles/Pregion_mgr.dir/build.make src/pregion_mgr/CMakeFiles/Pregion_mgr.dir/depend
+ $(MAKE) -f src/pregion_mgr/CMakeFiles/Pregion_mgr.dir/build.make src/pregion_mgr/CMakeFiles/Pregion_mgr.dir/build
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles --progress-num=18,19 "Built target Pregion_mgr"
+.PHONY : src/pregion_mgr/CMakeFiles/Pregion_mgr.dir/all
+
+# Include target in all.
+all: src/pregion_mgr/CMakeFiles/Pregion_mgr.dir/all
+
+.PHONY : all
+
+# Build rule for subdir invocation for target.
+src/pregion_mgr/CMakeFiles/Pregion_mgr.dir/rule: cmake_check_build_system
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 2
+ $(MAKE) -f CMakeFiles/Makefile2 src/pregion_mgr/CMakeFiles/Pregion_mgr.dir/all
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 0
+.PHONY : src/pregion_mgr/CMakeFiles/Pregion_mgr.dir/rule
+
+# Convenience name for target.
+Pregion_mgr: src/pregion_mgr/CMakeFiles/Pregion_mgr.dir/rule
+
+.PHONY : Pregion_mgr
+
+# clean rule for target.
+src/pregion_mgr/CMakeFiles/Pregion_mgr.dir/clean:
+ $(MAKE) -f src/pregion_mgr/CMakeFiles/Pregion_mgr.dir/build.make src/pregion_mgr/CMakeFiles/Pregion_mgr.dir/clean
+.PHONY : src/pregion_mgr/CMakeFiles/Pregion_mgr.dir/clean
+
+# clean rule for target.
+clean: src/pregion_mgr/CMakeFiles/Pregion_mgr.dir/clean
+
+.PHONY : clean
+
+#=============================================================================
+# Directory level rules for directory src/recover
+
+# Convenience name for "all" pass in the directory.
+src/recover/all: src/recover/CMakeFiles/clean_mem.dir/all
+src/recover/all: src/recover/CMakeFiles/recover.dir/all
+src/recover/all: src/recover/CMakeFiles/del_log.dir/all
+src/recover/all: src/recover/CMakeFiles/del_rgn.dir/all
+
+.PHONY : src/recover/all
+
+# Convenience name for "clean" pass in the directory.
+src/recover/clean: src/recover/CMakeFiles/clean_mem.dir/clean
+src/recover/clean: src/recover/CMakeFiles/recover.dir/clean
+src/recover/clean: src/recover/CMakeFiles/del_log.dir/clean
+src/recover/clean: src/recover/CMakeFiles/del_rgn.dir/clean
+
+.PHONY : src/recover/clean
+
+# Convenience name for "preinstall" pass in the directory.
+src/recover/preinstall:
+
+.PHONY : src/recover/preinstall
+
+#=============================================================================
+# Target rules for target src/recover/CMakeFiles/clean_mem.dir
+
+# All Build rule for target.
+src/recover/CMakeFiles/clean_mem.dir/all: CMakeFiles/atlas.dir/all
+ $(MAKE) -f src/recover/CMakeFiles/clean_mem.dir/build.make src/recover/CMakeFiles/clean_mem.dir/depend
+ $(MAKE) -f src/recover/CMakeFiles/clean_mem.dir/build.make src/recover/CMakeFiles/clean_mem.dir/build
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles --progress-num=27,28 "Built target clean_mem"
+.PHONY : src/recover/CMakeFiles/clean_mem.dir/all
+
+# Include target in all.
+all: src/recover/CMakeFiles/clean_mem.dir/all
+
+.PHONY : all
+
+# Build rule for subdir invocation for target.
+src/recover/CMakeFiles/clean_mem.dir/rule: cmake_check_build_system
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 24
+ $(MAKE) -f CMakeFiles/Makefile2 src/recover/CMakeFiles/clean_mem.dir/all
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 0
+.PHONY : src/recover/CMakeFiles/clean_mem.dir/rule
+
+# Convenience name for target.
+clean_mem: src/recover/CMakeFiles/clean_mem.dir/rule
+
+.PHONY : clean_mem
+
+# clean rule for target.
+src/recover/CMakeFiles/clean_mem.dir/clean:
+ $(MAKE) -f src/recover/CMakeFiles/clean_mem.dir/build.make src/recover/CMakeFiles/clean_mem.dir/clean
+.PHONY : src/recover/CMakeFiles/clean_mem.dir/clean
+
+# clean rule for target.
+clean: src/recover/CMakeFiles/clean_mem.dir/clean
+
+.PHONY : clean
+
+#=============================================================================
+# Target rules for target src/recover/CMakeFiles/recover.dir
+
+# All Build rule for target.
+src/recover/CMakeFiles/recover.dir/all: CMakeFiles/atlas.dir/all
+ $(MAKE) -f src/recover/CMakeFiles/recover.dir/build.make src/recover/CMakeFiles/recover.dir/depend
+ $(MAKE) -f src/recover/CMakeFiles/recover.dir/build.make src/recover/CMakeFiles/recover.dir/build
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles --progress-num=67,68 "Built target recover"
+.PHONY : src/recover/CMakeFiles/recover.dir/all
+
+# Include target in all.
+all: src/recover/CMakeFiles/recover.dir/all
+
+.PHONY : all
+
+# Build rule for subdir invocation for target.
+src/recover/CMakeFiles/recover.dir/rule: cmake_check_build_system
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 24
+ $(MAKE) -f CMakeFiles/Makefile2 src/recover/CMakeFiles/recover.dir/all
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 0
+.PHONY : src/recover/CMakeFiles/recover.dir/rule
+
+# Convenience name for target.
+recover: src/recover/CMakeFiles/recover.dir/rule
+
+.PHONY : recover
+
+# clean rule for target.
+src/recover/CMakeFiles/recover.dir/clean:
+ $(MAKE) -f src/recover/CMakeFiles/recover.dir/build.make src/recover/CMakeFiles/recover.dir/clean
+.PHONY : src/recover/CMakeFiles/recover.dir/clean
+
+# clean rule for target.
+clean: src/recover/CMakeFiles/recover.dir/clean
+
+.PHONY : clean
+
+#=============================================================================
+# Target rules for target src/recover/CMakeFiles/del_log.dir
+
+# All Build rule for target.
+src/recover/CMakeFiles/del_log.dir/all: CMakeFiles/atlas.dir/all
+ $(MAKE) -f src/recover/CMakeFiles/del_log.dir/build.make src/recover/CMakeFiles/del_log.dir/depend
+ $(MAKE) -f src/recover/CMakeFiles/del_log.dir/build.make src/recover/CMakeFiles/del_log.dir/build
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles --progress-num=42,43 "Built target del_log"
+.PHONY : src/recover/CMakeFiles/del_log.dir/all
+
+# Include target in all.
+all: src/recover/CMakeFiles/del_log.dir/all
+
+.PHONY : all
+
+# Build rule for subdir invocation for target.
+src/recover/CMakeFiles/del_log.dir/rule: cmake_check_build_system
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 24
+ $(MAKE) -f CMakeFiles/Makefile2 src/recover/CMakeFiles/del_log.dir/all
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 0
+.PHONY : src/recover/CMakeFiles/del_log.dir/rule
+
+# Convenience name for target.
+del_log: src/recover/CMakeFiles/del_log.dir/rule
+
+.PHONY : del_log
+
+# clean rule for target.
+src/recover/CMakeFiles/del_log.dir/clean:
+ $(MAKE) -f src/recover/CMakeFiles/del_log.dir/build.make src/recover/CMakeFiles/del_log.dir/clean
+.PHONY : src/recover/CMakeFiles/del_log.dir/clean
+
+# clean rule for target.
+clean: src/recover/CMakeFiles/del_log.dir/clean
+
+.PHONY : clean
+
+#=============================================================================
+# Target rules for target src/recover/CMakeFiles/del_rgn.dir
+
+# All Build rule for target.
+src/recover/CMakeFiles/del_rgn.dir/all: CMakeFiles/atlas.dir/all
+ $(MAKE) -f src/recover/CMakeFiles/del_rgn.dir/build.make src/recover/CMakeFiles/del_rgn.dir/depend
+ $(MAKE) -f src/recover/CMakeFiles/del_rgn.dir/build.make src/recover/CMakeFiles/del_rgn.dir/build
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles --progress-num=44,45 "Built target del_rgn"
+.PHONY : src/recover/CMakeFiles/del_rgn.dir/all
+
+# Include target in all.
+all: src/recover/CMakeFiles/del_rgn.dir/all
+
+.PHONY : all
+
+# Build rule for subdir invocation for target.
+src/recover/CMakeFiles/del_rgn.dir/rule: cmake_check_build_system
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 24
+ $(MAKE) -f CMakeFiles/Makefile2 src/recover/CMakeFiles/del_rgn.dir/all
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/vgogte/SFR/CoupledSFR/runtime/src/CMakeFiles 0
+.PHONY : src/recover/CMakeFiles/del_rgn.dir/rule
+
+# Convenience name for target.
+del_rgn: src/recover/CMakeFiles/del_rgn.dir/rule
+
+.PHONY : del_rgn
+
+# clean rule for target.
+src/recover/CMakeFiles/del_rgn.dir/clean:
+ $(MAKE) -f src/recover/CMakeFiles/del_rgn.dir/build.make src/recover/CMakeFiles/del_rgn.dir/clean
+.PHONY : src/recover/CMakeFiles/del_rgn.dir/clean
+
+# clean rule for target.
+clean: src/recover/CMakeFiles/del_rgn.dir/clean
+
+.PHONY : clean
+
+#=============================================================================
+# Special targets to cleanup operation of make.
+
+# Special rule to run CMake to check the build system integrity.
+# No rule that depends on this can have commands that come from listfiles
+# because they might be regenerated.
+cmake_check_build_system:
+ $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0
+.PHONY : cmake_check_build_system
+
diff --git a/runtime/src/CMakeFiles/TargetDirectories.txt b/ARP_CSFR/runtime/src/CMakeFiles/TargetDirectories.txt
similarity index 100%
rename from runtime/src/CMakeFiles/TargetDirectories.txt
rename to ARP_CSFR/runtime/src/CMakeFiles/TargetDirectories.txt
diff --git a/runtime/src/CMakeFiles/atlas.dir/DependInfo.cmake b/ARP_CSFR/runtime/src/CMakeFiles/atlas.dir/DependInfo.cmake
similarity index 100%
rename from runtime/src/CMakeFiles/atlas.dir/DependInfo.cmake
rename to ARP_CSFR/runtime/src/CMakeFiles/atlas.dir/DependInfo.cmake
diff --git a/runtime/src/CMakeFiles/atlas.dir/build.make b/ARP_CSFR/runtime/src/CMakeFiles/atlas.dir/build.make
similarity index 100%
rename from runtime/src/CMakeFiles/atlas.dir/build.make
rename to ARP_CSFR/runtime/src/CMakeFiles/atlas.dir/build.make
diff --git a/runtime/src/CMakeFiles/atlas.dir/cmake_clean.cmake b/ARP_CSFR/runtime/src/CMakeFiles/atlas.dir/cmake_clean.cmake
similarity index 100%
rename from runtime/src/CMakeFiles/atlas.dir/cmake_clean.cmake
rename to ARP_CSFR/runtime/src/CMakeFiles/atlas.dir/cmake_clean.cmake
diff --git a/runtime/src/CMakeFiles/atlas.dir/cmake_clean_target.cmake b/ARP_CSFR/runtime/src/CMakeFiles/atlas.dir/cmake_clean_target.cmake
similarity index 100%
rename from runtime/src/CMakeFiles/atlas.dir/cmake_clean_target.cmake
rename to ARP_CSFR/runtime/src/CMakeFiles/atlas.dir/cmake_clean_target.cmake
diff --git a/runtime/src/CMakeFiles/atlas.dir/depend.make b/ARP_CSFR/runtime/src/CMakeFiles/atlas.dir/depend.make
similarity index 100%
rename from runtime/src/CMakeFiles/atlas.dir/depend.make
rename to ARP_CSFR/runtime/src/CMakeFiles/atlas.dir/depend.make
diff --git a/runtime/src/CMakeFiles/atlas.dir/flags.make b/ARP_CSFR/runtime/src/CMakeFiles/atlas.dir/flags.make
similarity index 100%
rename from runtime/src/CMakeFiles/atlas.dir/flags.make
rename to ARP_CSFR/runtime/src/CMakeFiles/atlas.dir/flags.make
diff --git a/runtime/src/CMakeFiles/atlas.dir/link.txt b/ARP_CSFR/runtime/src/CMakeFiles/atlas.dir/link.txt
similarity index 100%
rename from runtime/src/CMakeFiles/atlas.dir/link.txt
rename to ARP_CSFR/runtime/src/CMakeFiles/atlas.dir/link.txt
diff --git a/runtime/src/CMakeFiles/atlas.dir/progress.make b/ARP_CSFR/runtime/src/CMakeFiles/atlas.dir/progress.make
similarity index 100%
rename from runtime/src/CMakeFiles/atlas.dir/progress.make
rename to ARP_CSFR/runtime/src/CMakeFiles/atlas.dir/progress.make
diff --git a/runtime/src/CMakeFiles/cmake.check_cache b/ARP_CSFR/runtime/src/CMakeFiles/cmake.check_cache
similarity index 100%
rename from runtime/src/CMakeFiles/cmake.check_cache
rename to ARP_CSFR/runtime/src/CMakeFiles/cmake.check_cache
diff --git a/runtime/src/CMakeFiles/feature_tests.bin b/ARP_CSFR/runtime/src/CMakeFiles/feature_tests.bin
similarity index 100%
rename from runtime/src/CMakeFiles/feature_tests.bin
rename to ARP_CSFR/runtime/src/CMakeFiles/feature_tests.bin
diff --git a/runtime/src/CMakeFiles/feature_tests.c b/ARP_CSFR/runtime/src/CMakeFiles/feature_tests.c
similarity index 100%
rename from runtime/src/CMakeFiles/feature_tests.c
rename to ARP_CSFR/runtime/src/CMakeFiles/feature_tests.c
diff --git a/runtime/src/CMakeFiles/feature_tests.cxx b/ARP_CSFR/runtime/src/CMakeFiles/feature_tests.cxx
similarity index 100%
rename from runtime/src/CMakeFiles/feature_tests.cxx
rename to ARP_CSFR/runtime/src/CMakeFiles/feature_tests.cxx
diff --git a/ARP_CSFR/runtime/src/CMakeFiles/progress.marks b/ARP_CSFR/runtime/src/CMakeFiles/progress.marks
new file mode 100644
index 0000000000000000000000000000000000000000..d61f00d8cad3920809f4d992ac3031b3f32e7f10
--- /dev/null
+++ b/ARP_CSFR/runtime/src/CMakeFiles/progress.marks
@@ -0,0 +1 @@
+90
diff --git a/ARP_CSFR/runtime/src/CMakeLists.txt b/ARP_CSFR/runtime/src/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..1c208db77b73a19b0c053d515a2b79c3db95834f
--- /dev/null
+++ b/ARP_CSFR/runtime/src/CMakeLists.txt
@@ -0,0 +1,23 @@
+#
+# (c) Copyright 2016 Hewlett Packard Enterprise Development LP
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version. This program is
+# distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# for more details. You should have received a copy of the GNU Lesser
+# General Public License along with this program. If not, see
+# .
+#
+# src CMakeLists.txt
+
+add_subdirectory (cache_flush)
+add_subdirectory (consistency)
+add_subdirectory (logger)
+add_subdirectory (util)
+add_subdirectory (pmalloc)
+add_subdirectory (pregion_mgr)
+add_subdirectory (recover)
diff --git a/runtime/src/Makefile b/ARP_CSFR/runtime/src/Makefile
similarity index 100%
rename from runtime/src/Makefile
rename to ARP_CSFR/runtime/src/Makefile
diff --git a/ARP_CSFR/runtime/src/README.md b/ARP_CSFR/runtime/src/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..f169da51e70625b6ae0eb56759c4b8409d709f7c
--- /dev/null
+++ b/ARP_CSFR/runtime/src/README.md
@@ -0,0 +1,93 @@
+[//]: # ( (c) Copyright 2016 Hewlett Packard Enterprise Development LP )
+[//]: # ( )
+[//]: # ( This program is free software: you can redistribute it and/or modify )
+[//]: # ( it under the terms of the GNU Lesser General Public License as )
+[//]: # ( published by the Free Software Foundation, either version 3 of the )
+[//]: # ( License, or (at your option) any later version. This program is )
+[//]: # ( distributed in the hope that it will be useful, but WITHOUT ANY )
+[//]: # ( WARRANTY; without even the implied warranty of MERCHANTABILITY or )
+[//]: # ( FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License )
+[//]: # ( for more details. You should have received a copy of the GNU Lesser )
+[//]: # ( General Public License along with this program. If not, see )
+[//]: # ( . )
+
+
+# Atlas Runtime APIs
+
+Atlas is a high-level programming environment for non-volatile
+memory. In-memory objects can be persisted or made durable with
+relatively minor changes to code. There are 2 classes of APIs:
+persistent region APIs and consistency APIs. The first class is used
+to create/find/delete containers that store persistent data and can be
+found in include/atlas_alloc.h. The second class is used to convey
+data-consistency information to the system. Currently, this includes a
+durable section (demarcated by begin_durable and end_durable) and
+classical lock-based critical sections. See `include/atlas_api.h` for
+these interfaces. For examples of how to write a persistent program
+using Atlas, see `runtime/tests/data_structures/README.md`.
+
+## Building
+
+Atlas "runtime" uses cmake. cmake 3.1 is the minimum required
+version. The library build must be in a separate build
+directory. Assume that the top-level Atlas runtime directory is
+`ATLAS_RUNTIME` and the build directory is `ATLAS_BUILD`. First create
+`ATLAS_BUILD`. It is recommended to name this directory with the atlas
+build config, e.g. `build-all`, or `build-all-persist`. Invoke cmake
+within `ATLAS_BUILD`, passing the path to `ATLAS_RUNTIME` and
+any variables needed for the config. Example:
+
+ $ cd
+ $ mkdir build-all
+ $ cd build-all
+ $ cmake ..
+ $ make
+
+There are a number of modes for building the runtime. See
+`runtime/CMakeLists.txt` for the supported ones. For example, to turn on
+Atlas statistics, the cmake config line above should be:
+
+ $ cmake .. -DNVM_STATS=true
+
+To rebuild Atlas runtime when changes are made to the sources,
+just invoke `make` again.
+
+# Testing
+
+Persistent memory is simulated using Linux tmpfs, so make sure
+`/dev/shm` is available, has enough space, and has `rwx`
+permissions. After making, invoke `/tests/run_quick_test`
+to do some basic testing. For developers: make sure that
+`/tools/run_tests` passes before checking in.
+
+# Organization
+
+`ATLAS_RUNTIME` has the following subdirectories:
+
+`include`: contains the headers with exported interfaces. These are
+the only headers that should be included in applications.
+
+`src`: the source files
+
+`src/internal_includes`: internal header files
+
+`src/pregion_mgr`: persistent region support
+
+`src/pmalloc`: persistent allocator support
+
+`src/logger`: support for logging updates to persistent memory
+
+`src/consistency`: automatic computation of consistent states and log pruning
+
+`src/cache_flush`: optimized cache line flush support
+
+`src/recover`: support for recovery after a failure
+
+`src/util`: common routines
+
+`tools`: `/tools/run_tests` goes through a variety of
+build targets and does some basic testing for each of them.
+
+`tests`: directory used for testing. Contains binaries, inputs,
+outputs, reference files, etc. See the READMEs in the individual
+subdirectories.
diff --git a/runtime/src/cache_flush/CMakeLists.txt b/ARP_CSFR/runtime/src/cache_flush/CMakeLists.txt
similarity index 100%
rename from runtime/src/cache_flush/CMakeLists.txt
rename to ARP_CSFR/runtime/src/cache_flush/CMakeLists.txt
diff --git a/ARP_CSFR/runtime/src/cache_flush/delayed.cpp b/ARP_CSFR/runtime/src/cache_flush/delayed.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..ebe3ad685349c8c415c6e3b4fbaba81a16242a0e
--- /dev/null
+++ b/ARP_CSFR/runtime/src/cache_flush/delayed.cpp
@@ -0,0 +1,87 @@
+/*
+ * (c) Copyright 2016 Hewlett Packard Enterprise Development LP
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version. This program is
+ * distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details. You should have received a copy of the GNU Lesser
+ * General Public License along with this program. If not, see
+ * .
+ */
+
+
+#include "log_mgr.hpp"
+
+// TODO Cache flush functionality should be in its own class
+
+namespace Atlas {
+
+#if (defined(_FLUSH_LOCAL_COMMIT) || defined(_FLUSH_GLOBAL_COMMIT)) && \
+ !(defined DISABLE_FLUSHES)
+
+void LogMgr::collectCacheLines(SetOfInts *cl_set, void *addr, size_t sz)
+{
+#ifdef _FORCE_FAIL
+ fail_program();
+#endif
+ if (!sz) return;
+
+ char *last_addr = (char*)addr + sz - 1;
+ char *line_addr = (char*)((uint64_t)addr &
+ PMallocUtil::get_cache_line_mask());
+ char *last_line_addr = (char*)((uint64_t)last_addr &
+ PMallocUtil::get_cache_line_mask());
+ do {
+// (*cl_set).insert((uint64_t)line_addr);
+ NVM_FLUSH(line_addr);
+ line_addr += PMallocUtil::get_cache_line_size();
+ }while (line_addr < last_line_addr+1);
+}
+
+void LogMgr::flushCacheLines(const SetOfInts & cl_set)
+{
+#ifdef _FORCE_FAIL
+ fail_program();
+#endif
+ full_fence();
+ return;
+ SetOfInts::const_iterator ci_end = cl_set.end();
+ for (SetOfInts::const_iterator ci = cl_set.begin(); ci != ci_end; ++ ci) {
+ assert(*ci);
+ // We are assuming that a user persistent region is not closed
+ // within a critical or atomic section.
+#ifdef _FLUSH_GLOBAL_COMMIT
+ // This is the only scenario today where the helper thread is
+ // flushing data (i.e. essentially writing) data into a user
+ // persistent region. But this region may have been closed by
+ // the user by this point. So need to check for this
+ // situation. This is still not full-proof since the region
+ // can be closed between the check and the actual flush.
+ // This will at least prevent a fault but more needs to be done
+ // to ensure consistency.
+ if (!NVM_IsInOpenPR((void*)*ci, 1 /*dummy*/))
+ continue;
+#endif
+ NVM_CLFLUSH((char*)*ci);
+ }
+ full_fence();
+}
+
+void LogMgr::flushCacheLinesUnconstrained(const SetOfInts & cl_set)
+{
+#ifdef _FORCE_FAIL
+ fail_program();
+#endif
+ SetOfInts::const_iterator ci_end = cl_set.end();
+ for (SetOfInts::const_iterator ci = cl_set.begin(); ci != ci_end; ++ ci) {
+ assert(*ci);
+ NVM_CLFLUSH((char*)*ci);
+ }
+}
+#endif
+
+} // namespace Atlas
diff --git a/ARP_CSFR/runtime/src/cache_flush/generic.cpp b/ARP_CSFR/runtime/src/cache_flush/generic.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..afa60d9e719a1bed779aabb92e0d4bb4b7cd2123
--- /dev/null
+++ b/ARP_CSFR/runtime/src/cache_flush/generic.cpp
@@ -0,0 +1,61 @@
+/*
+ * (c) Copyright 2016 Hewlett Packard Enterprise Development LP
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version. This program is
+ * distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details. You should have received a copy of the GNU Lesser
+ * General Public License along with this program. If not, see
+ * .
+ */
+
+
+#include "log_mgr.hpp"
+
+namespace Atlas {
+
+void LogMgr::psyncWithAcquireBarrier(void *start_addr, size_t sz)
+{
+#ifdef _FORCE_FAIL
+ fail_program();
+#endif
+ if (sz <= 0) return;
+
+ char *last_addr = (char*)start_addr + sz - 1;
+
+ char *cacheline_addr =
+ (char*)(((uint64_t)start_addr) & PMallocUtil::get_cache_line_mask());
+ char *last_cacheline_addr =
+ (char*)(((uint64_t)last_addr) & PMallocUtil::get_cache_line_mask());
+
+ full_fence();
+ do {
+ NVM_CLFLUSH(cacheline_addr);
+ cacheline_addr += PMallocUtil::get_cache_line_size();
+ }while (cacheline_addr < last_cacheline_addr+1);
+}
+
+void LogMgr::psync(void *start_addr, size_t sz)
+{
+ psyncWithAcquireBarrier(start_addr, sz);
+ full_fence();
+}
+
+void LogMgr::flushAtEndOfFase()
+{
+#if defined(_FLUSH_LOCAL_COMMIT) && !defined(DISABLE_FLUSHES)
+ assert(TL_FaseFlushPtr_);
+ if (!TL_FaseFlushPtr_->empty()) {
+ flushCacheLines(*TL_FaseFlushPtr_);
+ TL_FaseFlushPtr_->clear();
+ }
+#elif defined(_USE_TABLE_FLUSH) && !defined(DISABLE_FLUSHES)
+ syncDataFlush();
+#endif
+}
+
+} // namespace Atlas
diff --git a/ARP_CSFR/runtime/src/cache_flush/table_based.cpp b/ARP_CSFR/runtime/src/cache_flush/table_based.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..a3229bfa8241c375dc056ce45a95a6d0f69c8a47
--- /dev/null
+++ b/ARP_CSFR/runtime/src/cache_flush/table_based.cpp
@@ -0,0 +1,125 @@
+/*
+ * (c) Copyright 2016 Hewlett Packard Enterprise Development LP
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version. This program is
+ * distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details. You should have received a copy of the GNU Lesser
+ * General Public License along with this program. If not, see
+ * .
+ */
+
+
+#include "log_mgr.hpp"
+
+void AsyncDataCacheFlush(void *p);
+void AsyncMemOpDataCacheFlush(void *dst, size_t sz);
+void SyncDataCacheFlush();
+
+namespace Atlas {
+
+#if 0 // unused
+void LogMgr::asyncLogFlush(void *p)
+{
+ // Since this is a log entry, we don't need to check whether it is
+ // persistent or not. It must be persistent.
+ intptr_t *entry = TL_LogFlushTab_ +
+ (((intptr_t)p >> kFlushShift) & kFlushTableMask);
+ intptr_t cache_line = (intptr_t)p & PMallocUtil::get_cache_line_mask();
+
+ if (*entry != cache_line) {
+ if (*entry) {
+ full_fence();
+ NVM_CLFLUSH(*entry);
+ }
+ *entry = cache_line;
+ }
+}
+
+void LogMgr::syncLogFlush()
+{
+ int i;
+ full_fence();
+ for (i=0; i> kFlushShift) & kFlushTableMask);
+ intptr_t cache_line = (intptr_t)p & PMallocUtil::get_cache_line_mask();
+
+ if (*entry != cache_line) {
+ if (*entry) {
+ full_fence();
+ NVM_CLFLUSH(*entry);
+ }
+ *entry = cache_line;
+ }
+}
+
+void LogMgr::asyncMemOpDataFlush(void *dst, size_t sz)
+{
+#ifdef _FORCE_FAIL
+ fail_program();
+#endif
+ if (!NVM_IsInOpenPR(dst, 1)) return;
+
+ if (sz <= 0) return;
+
+ char *last_addr = (char*)dst + sz - 1;
+ char *cacheline_addr =
+ (char*)(((uint64_t)dst) & PMallocUtil::get_cache_line_mask());
+ char *last_cacheline_addr =
+ (char*)(((uint64_t)last_addr) & PMallocUtil::get_cache_line_mask());
+
+ intptr_t *entry;
+ full_fence();
+ do {
+ entry = TL_DataFlushTab_ +
+ (((intptr_t)cacheline_addr >> kFlushShift) & kFlushTableMask);
+ if (*entry != (intptr_t)cacheline_addr) {
+ if (*entry) NVM_CLFLUSH(*entry);
+ *entry = (intptr_t)cacheline_addr;
+ }
+ cacheline_addr += PMallocUtil::get_cache_line_size();
+ }while (cacheline_addr < last_cacheline_addr+1);
+}
+
+void LogMgr::syncDataFlush()
+{
+#ifdef _FORCE_FAIL
+ fail_program();
+#endif
+ int i;
+ full_fence();
+ for (i=0; i.
+ */
+
+
+#include
+#include
+
+#include "atlas_api.h"
+#include "util.hpp"
+
+#include "pregion_mgr.hpp"
+#include "log_mgr.hpp"
+#include "consistency_mgr.hpp"
+#include "circular_buffer.hpp"
+
+namespace Atlas {
+
+bool CSMgr::isFoundInExistingLog(LogEntry *le, uint64_t gen_num) const
+{
+ Helper::MapLog2Int::const_iterator ci = ExistingRelMap_->find(le);
+ if (ci != ExistingRelMap_->end() && ci->second == gen_num) return true;
+ return false;
+}
+
+// Build a Failure Atomic Section (FASection) given the starting log
+// entry for the FASE. This data structure is used by the helper
+// thread alone. The builder starts with a provided log entry and
+// traverses the thread-specific logs until it either runs out of them
+// or comes across the end of an outermost critical section. If the
+// former, a FASE is not built. If the latter, a FASE is built and
+// returned.
+FASection *CSMgr::buildFASection(LogEntry *le)
+{
+#ifdef _FORCE_FAIL
+ fail_program();
+#endif
+ uint32_t lock_count = 0;
+ LogEntry *first_le = le;
+ while (le) {
+ LogEntry *next_le = le->Next.load(std::memory_order_acquire);
+ if (!next_le) return nullptr; // always keep one non-null log entry
+
+ if (le->isAcquire() || le->isRWLockRdLock() || le->isRWLockWrLock()
+ || le->isBeginDurable()) ++lock_count;
+
+ if (le->isRelease() || le->isRWLockUnlock() || le->isEndDurable()) {
+ if (lock_count > 0) --lock_count;
+ if (!lock_count)
+ return new FASection(first_le, le);
+ }
+ le = next_le;
+ }
+ assert(0 && "FASE construction in an unexpected code path!");
+ return nullptr;
+}
+
+void CSMgr::destroyFASections()
+{
+#ifdef _FORCE_FAIL
+ fail_program();
+#endif
+ FaseVec::iterator ci_end = AllFases_.end();
+ for (FaseVec::iterator ci = AllFases_.begin(); ci != ci_end; ++ci)
+ delete *ci;
+}
+
+//
+// Examine the pending list, trying to find the log entry that
+// immediately happens before it, adding to the durability graph in
+// the process. At the end of this function, the pending list is left
+// with log entries that cannot be resolved in the current round.
+void CSMgr::resolvePendingList()
+{
+#ifdef _FORCE_FAIL
+ fail_program();
+#endif
+ if (PendingList_.empty()) {
+ traceHelper("Pending list is empty: graph unchanged\n");
+ return;
+ }
+
+#if defined(NVM_STATS) && defined(_PROFILE_HT)
+ uint64_t start_graph_resolve = atlas_rdtsc();
+#endif
+
+ // Track the resolved entries using a vector
+ typedef std::vector DelVec;
+ DelVec del_vec;
+
+ PendingList::iterator ci_end = PendingList_.end();
+ for (PendingList::iterator ci = PendingList_.begin(); ci != ci_end; ++ci) {
+ LogEntry *le = ci->first;
+
+ assert(le);
+ assert(le->isAcquire());
+ assert(le->ValueOrPtr);
+
+ const DGraph::NodeInfo& node_info =
+ Graph_.getTargetNodeInfo(
+ reinterpret_cast(le->ValueOrPtr));
+
+ if (node_info.NodeType_ == DGraph::kAvail) {
+ Graph_.createEdge(ci->second, node_info.NodeId_);
+ // Now that this entry is resolved, tag it for deletion
+ del_vec.push_back(ci);
+ }
+ // Mark the corresponding node unstable only if target is absent.
+ else if (node_info.NodeType_ == DGraph::kAbsent)
+ if (le->ValueOrPtr)
+ set_is_stable(ci->second, false);
+ }
+ // Actual removal of tagged resolved entries
+ DelVec::const_iterator del_ci_end = del_vec.end();
+ for (DelVec::const_iterator del_ci = del_vec.begin();
+ del_ci != del_ci_end; ++ del_ci)
+ PendingList_.erase(*del_ci);
+
+#if defined(NVM_STATS) && defined(_PROFILE_HT)
+ uint64_t stop_graph_resolve = atlas_rdtsc();
+ Helper::getInstance().incrementTotalGraphResolveTime(
+ stop_graph_resolve - start_graph_resolve);
+#endif
+
+ traceHelper(get_num_graph_vertices());
+ traceHelper(" nodes found in graph after pending list resolution\n");
+ traceGraph();
+}
+
+// This routine removes nodes (from the durability graph) that cannot
+// be resolved
+void CSMgr::removeUnresolvedNodes()
+{
+#ifdef _FORCE_FAIL
+ fail_program();
+#endif
+ if (PendingList_.empty()) {
+ traceHelper("Pending list is empty: graph unchanged\n");
+ return;
+ }
+
+#if defined(NVM_STATS) && defined(_PROFILE_HT)
+ uint64_t start_graph_resolve = atlas_rdtsc();
+#endif
+
+ MapNodes removed_nodes;
+ std::pair vp;
+ for (vp = vertices(Graph_.get_directed_graph());
+ vp.first != vp.second; ++ vp.first) {
+ DGraph::VDesc nid = *(vp.first);
+
+ // This node has been already processed
+ if (removed_nodes.find(nid) != removed_nodes.end()) {
+ assert(!is_stable(nid));
+ continue;
+ }
+
+ if (is_stable(nid)) continue;
+ handleUnresolved(nid, &removed_nodes);
+ }
+
+ // Actually remove the nodes
+ MapNodes::const_iterator rm_ci_end = removed_nodes.end();
+ MapNodes::const_iterator rm_ci = removed_nodes.begin();
+ for (; rm_ci != rm_ci_end; ++ rm_ci)
+ {
+ Graph_.clear_vertex(rm_ci->first);
+ Graph_.remove_vertex(rm_ci->first);
+ }
+
+#if defined(NVM_STATS) && defined(_PROFILE_HT)
+ uint64_t stop_graph_resolve = atlas_rdtsc();
+ Helper::getInstance().incrementTotalGraphResolveTime(
+ stop_graph_resolve - start_graph_resolve);
+#endif
+
+ traceHelper(get_num_graph_vertices());
+ traceHelper(" nodes found in resolved graph\n");
+ traceGraph();
+}
+
+//
+// Given an unstable node, mark other "happen-after" nodes unstable
+// as well.
+//
+void CSMgr::handleUnresolved(DGraph::VDesc nid, MapNodes *removed_nodes)
+{
+#ifdef _FORCE_FAIL
+ fail_program();
+#endif
+ // already handled
+ if (removed_nodes->find(nid) != removed_nodes->end()) return;
+
+ (*removed_nodes)[nid] = true;
+
+ // if nid is removed, examine all in-edges and for a given in-edge,
+ // remove the source node as well
+ std::pair iep;
+ for (iep = in_edges(nid, Graph_.get_directed_graph());
+ iep.first != iep.second; ++iep.first) {
+ DGraph::EDesc eid = *iep.first;
+ DGraph::VDesc src = source(eid, Graph_.get_directed_graph());
+
+ if (removed_nodes->find(src) != removed_nodes->end()) {
+ assert(!is_stable(src));
+ continue;
+ }
+ set_is_stable(src, false);
+ handleUnresolved(src, removed_nodes);
+ }
+}
+
+//
+// At this point, a node is in the graph if an only if it belongs to
+// the corresponding consistent state. This routine creates a new
+// version of the log structure and adds it to the list of such
+// outstanding new versions. This new version has new thread-specific
+// headers that point to log entries in a way that excludes the FASEs
+// corresponding to the graph nodes that belong to this consistent state.
+//
+void CSMgr::createVersions(Helper::LogVersions *log_v)
+{
+#ifdef _FORCE_FAIL
+ fail_program();
+#endif
+ if (!get_num_graph_vertices()) return;
+
+#if defined(NVM_STATS) && defined(_PROFILE_HT)
+ uint64_t start_graph_resolve = atlas_rdtsc();
+#endif
+
+ // All nodes in the graph at this point are complete and have been
+ // resolved. So all of the corresponding FASEs are marked deletable.
+ std::pair vp;
+ for (vp = vertices(Graph_.get_directed_graph());
+ vp.first != vp.second; ++ vp.first) {
+ FASection *fase = Graph_.get_fase(*vp.first);
+ assert(fase);
+ assert(!fase->IsDeleted);
+ fase->IsDeleted = true;
+ }
+
+ // TODO cache these instances?
+ LogStructure *lsp = IsInRecovery_ ?
+ LogMgr::getInstance().getRecoveryLogPointer(
+ std::memory_order_acquire) :
+ LogMgr::getInstance().getLogPointer(std::memory_order_acquire);
+ assert(lsp);
+
+ LogStructure *new_header = 0;
+ LogStructure *last_ls = 0;
+ // We walk the log-structure-header, and for every entry in it,
+ // walk through that thread's FASEs and find the first undeleted
+ // one.
+
+ Log2Bool deletable_logs; // log entries to be deleted in this version
+ while (lsp) {
+ FASection *fase = getFirstFase(lsp);
+ bool found_undeleted = false;
+ if (!fase) {
+ found_undeleted = true;
+ addLogStructure(lsp->Le, &new_header, &last_ls);
+ }
+ FASection *last_fase = nullptr;
+ while (fase) {
+ if (!found_undeleted && !fase->IsDeleted) {
+ found_undeleted = true;
+ addLogStructure(fase->First, &new_header, &last_ls);
+ last_fase = fase;
+ fase = fase->Next;
+ break;
+ }
+ else {
+ collectLogs(&deletable_logs, fase);
+ last_fase = fase;
+ fase = fase->Next;
+ }
+ }
+ // For a given thread, we always leave the last log entry around.
+
+ // We may not have found an undeleted FASE if all created
+ // FASEs are in the consistent state
+ if (!found_undeleted) {
+ assert(last_fase);
+ assert(last_fase->Last);
+ assert(last_fase->Last->Next);
+ addLogStructure(last_fase->Last->Next, &new_header, &last_ls);
+ }
+ lsp = lsp->Next;
+ }
+ assert(new_header);
+ (*log_v).push_back(Helper::LogVer(new_header, deletable_logs));
+
+#if defined(NVM_STATS) && defined(_PROFILE_HT)
+ uint64_t stop_graph_resolve = atlas_rdtsc();
+ Helper::getInstance().incrementTotalGraphResolveTime(
+ stop_graph_resolve - start_graph_resolve);
+#endif
+}
+
+///
+/// @brief Add a new thread specific log header
+/// @param le Log entry the new header points to
+/// @param header A pointer to a future global header
+/// @param last_header The last thread specific log header in sequence
+///
+/// Create a new thread specific log header. If this is the first in
+/// the sequence of thread specific log headers, set the future global
+/// header, otherwise have the last thread specific header to point to
+/// this newly created one.
+void CSMgr::addLogStructure(LogEntry *le, LogStructure **header,
+ LogStructure **last_header)
+{
+#ifdef _FORCE_FAIL
+ fail_program();
+#endif
+ assert(header);
+ assert(last_header);
+ // TODO ensure that new_ls is getting flushed
+ LogStructure *new_ls = LogMgr::getInstance().createLogStructure(le);
+ if (!*header) *header = new_ls;
+ else {
+ assert(*last_header);
+ (*last_header)->Next = new_ls;
+#if !defined(_DISABLE_LOG_FLUSH) && !defined(DISABLE_FLUSHES)
+ NVM_FLUSH_ACQ(&(*last_header)->Next);
+#endif
+ }
+ *last_header = new_ls;
+}
+
+// Add all log entries of the provided FASE to the map
+void CSMgr::collectLogs(Log2Bool *logs, FASection *fase)
+{
+#ifdef _FORCE_FAIL
+ fail_program();
+#endif
+ assert(fase);
+ assert(fase->Last);
+ assert(fase->IsDeleted);
+
+ LogEntry *curr = fase->First;
+ do {
+ assert(curr);
+ (*logs)[curr] = true;
+ if (curr == fase->Last) break;
+ curr = curr->Next;
+ }while (true);
+}
+
+} // namespace Atlas
diff --git a/ARP_CSFR/runtime/src/consistency/consistency_mgr.cpp b/ARP_CSFR/runtime/src/consistency/consistency_mgr.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..bc49833ee912b1e04e70092911f813e94c79b6dc
--- /dev/null
+++ b/ARP_CSFR/runtime/src/consistency/consistency_mgr.cpp
@@ -0,0 +1,85 @@
+/*
+ * (c) Copyright 2016 Hewlett Packard Enterprise Development LP
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version. This program is
+ * distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details. You should have received a copy of the GNU Lesser
+ * General Public License along with this program. If not, see
+ * .
+ */
+
+
+#include "consistency_mgr.hpp"
+
+namespace Atlas {
+
+CSMgr *CSMgr::Instance_{nullptr};
+
+///
+/// @brief Main entry point for a single round of consistent state gen
+/// @param lsp Pointer to the first thread specific header
+/// @param log_v Pointer to the versions of consistent states
+/// @param is_in_recovery Whether invoked online or during recovery
+///
+/// Build a graph of completed failure atomic sections (FASE) with
+/// durability edges among them. All log entries of a FASE are in a
+/// consistent state if all log entries they transitively happen-after
+/// are also in the same consistent state. Failure-atomically removing
+/// these log entries advances the persistent consistent state.
+///
+void CSMgr::doConsistentUpdate(LogStructure *lsp,
+ Helper::LogVersions *log_v,
+ bool is_in_recovery)
+{
+#ifdef _FORCE_FAIL
+ fail_program();
+#endif
+ IsInRecovery_ = is_in_recovery;
+
+ // TODO incorporate consistency analysis profiling if required
+
+ buildInitialGraph(lsp);
+
+ if (IsParentDone_) return;
+
+ // If there is any pending entry from the initial graph created
+ // above, examine whether it can be resolved.
+ resolvePendingList();
+ if (areUserThreadsDone()) {
+ IsParentDone_ = true;
+ return;
+ }
+
+ // If there is still any unresolved log entry, it cannot belong to
+ // a consistent state.
+ removeUnresolvedNodes();
+ if (areUserThreadsDone()) {
+ IsParentDone_ = true;
+ return;
+ }
+
+ // TODO: If we are in recovery phase and the resolved graph is
+ // empty, we should increase the candidate log entries chosen and
+ // then try again.
+ if (IsInRecovery_ && !get_num_graph_vertices()) return;
+
+ // Create versions of consistent states
+ createVersions(log_v);
+ if (areUserThreadsDone()) {
+ IsParentDone_ = true;
+ return;
+ }
+
+ // Remove the log entries failure-atomically.
+ destroyLogs(log_v);
+
+ // Clean up FASEs created for this round.
+ destroyFASections();
+}
+
+} // namespace Atlas
diff --git a/ARP_CSFR/runtime/src/consistency/durability_graph_builder.cpp b/ARP_CSFR/runtime/src/consistency/durability_graph_builder.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..ee73237efcba4df2893407789e95dbb1303c6352
--- /dev/null
+++ b/ARP_CSFR/runtime/src/consistency/durability_graph_builder.cpp
@@ -0,0 +1,474 @@
+/*
+ * (c) Copyright 2016 Hewlett Packard Enterprise Development LP
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version. This program is
+ * distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details. You should have received a copy of the GNU Lesser
+ * General Public License along with this program. If not, see
+ * .
+ */
+
+
+#include "consistency_configs.hpp"
+#include "consistency_mgr.hpp"
+#include "durability_graph.hpp"
+#include "helper.hpp"
+
+namespace Atlas {
+
+static inline void addThreadNode(
+ CSMgr::MapNodes *thread_nodes, DGraph::VDesc nid)
+{
+ assert(thread_nodes->find(nid) == thread_nodes->end());
+ thread_nodes->insert(std::make_pair(nid, true));
+}
+
+static inline bool hasThreadNode(
+ const CSMgr::MapNodes& thread_nodes, DGraph::VDesc nid)
+{
+ return thread_nodes.find(nid) != thread_nodes.end();
+}
+
+void CSMgr::buildInitialGraph(LogStructure *lsp)
+{
+#ifdef _FORCE_FAIL
+ fail_program();
+#endif
+#if defined(NVM_STATS) && defined(_PROFILE_HT)
+ uint64_t start_graph_build = atlas_rdtsc();
+#endif
+
+ // This loop goes through the log entries of one thread at a time
+ while (lsp) {
+ LogEntry *current_le = lsp->Le;
+ assert(current_le);
+
+ DGraph::VDesc prev_nid = 0;
+ FASection *prev_fase = nullptr;
+ bool is_first_node = true;
+ uint32_t fase_count = 0;
+ MapNodes thread_nodes;
+ // This loop goes through the FASEs
+ while (true) {
+ ++fase_count;
+
+ // TODO: If a consistent state is not found, the number
+ // of FASEs examined should be increased.
+
+ // There is a configurable maximum number of FASEs chosen
+ // from a given thread in a given analysis step
+ if (fase_count > kFaseAnalysisLimit) break;
+
+ if (areUserThreadsDone()) {
+ IsParentDone_ = true;
+ break;
+ }
+
+ // Build a FASE starting with this log entry
+ FASection *current_fase = buildFASection(current_le);
+ if (!current_fase) break; // this thread is done
+ else {
+ if (!isFirstFaseFound(lsp))
+ addFirstFase(lsp, current_fase);
+ addFaseToVec(current_fase);
+ }
+
+ if (prev_fase) prev_fase->Next = current_fase;
+
+ DGraph::VDesc nid = Graph_.createNode(current_fase);
+ addThreadNode(&thread_nodes, nid);
+
+ if (!is_first_node) {
+ assert(prev_nid);
+ Graph_.createEdge(nid, prev_nid);
+ }
+
+ is_first_node = false;
+ prev_nid = nid;
+
+ // This loop goes through the log entries of a FASE
+ do {
+ addSyncEdges(thread_nodes, current_le, nid);
+
+ if (current_le == current_fase->Last) break;
+
+ // No need for an atomic read, we are guaranteed
+ // at this point that the next ptr won't change.
+ current_le = current_le->Next;
+
+ }while (true);
+
+ prev_fase = current_fase;
+ current_le = current_le->Next.load(std::memory_order_acquire);
+ }
+ if (IsParentDone_) break;
+ lsp = lsp->Next;
+ }
+
+#if defined(NVM_STATS) && defined(_PROFILE_HT)
+ uint64_t stop_graph_build = atlas_rdtsc();
+ Helper::getInstance().incrementTotalGraphBuildTime(
+ stop_graph_build - start_graph_build);
+#endif
+
+ traceHelper(get_num_graph_vertices());
+ traceHelper(" nodes found in initial graph\n");
+ traceGraph();
+}
+
+// TODO Take care of reentrant locking.
+// Keeping a thread-local map to filter out locks held at a certain point
+// of time can help here.
+
+///
+/// @brief Add synchronizes-with edges between log entries
+/// @param thread_nodes Nodes created till now by this thread
+/// @param le Log entry to be processed
+/// @param nid Node id of the FASE containing le
+///
+/// An acquire log entry is examined to see whether a
+/// synchronizes-with relation should be created. A number of
+/// scenarios can arise:
+/// (1) The acquire log entry does not synchronize-with anything.
+/// (2) This is an online analysis phase and the acquire log entry "le"
+/// synchronizes-with a release log entry "rle" but "rle" was deleted
+/// earlier while computing a consistent state. In such a case, no
+/// synchronizes-with relation needs to be added.
+/// (3) If this is invoked during recovery and #2 does not hold and
+/// the acquire log entry "le" synchronizes-with a release log entry
+/// "rle" but "rle" is not found in the log entries left over at the
+/// start of recovery, no synchronizes-with relation needs to be
+/// added.
+/// (4) If the above are not satisfied and the acquire log entry "le"
+/// synchronizes-with a release log entry "rle" and "rle" belongs to an
+/// existing node "tgt" of the graph, add a synchronizes-with edge
+/// from nid to tgt.
+/// (5) If the acquire log entry "le" synchronizes with a release log
+/// entry "rle" and "rle" does not belong to an existing node of the
+/// graph, "le" is added to a pending list to be examined again after
+/// all the nodes of the graph are created. If it cannot be resolved
+/// even then, this FASE cannot belong to the consistent state under
+/// creation.
+/// If "le" is of release type, track it for future synchronizes-with
+/// relationship creation.
+///
+// TODO: do other log types need handling? free and rw-type
+void CSMgr::addSyncEdges(
+ const MapNodes& thread_nodes, LogEntry *le, DGraph::VDesc nid)
+{
+#ifdef _FORCE_FAIL
+ fail_program();
+#endif
+ // First filter out the scenario where the target is already deleted
+ if (le->isAcquire() && le->ValueOrPtr) {
+ LogEntry *rel_le = (LogEntry*)(le->ValueOrPtr);
+
+ // Note: the following call deletes the found entry.
+ // ValueOrPtr is currently not of atomic type. This
+ // is still ok as long as there is a single helper
+ // thread.
+ if (Helper::getInstance().isDeletedByHelperThread(rel_le, le->Size))
+ le->ValueOrPtr = 0;
+ else if (IsInRecovery_ && !isFoundInExistingLog(rel_le, le->Size))
+ le->ValueOrPtr = 0;
+ }
+
+ if (le->isAcquire() && le->ValueOrPtr) {
+ const DGraph::NodeInfo& node_info =
+ Graph_.getTargetNodeInfo((LogEntry *)le->ValueOrPtr);
+ if (node_info.NodeType_ == DGraph::kAvail) {
+ if (!hasThreadNode(thread_nodes, node_info.NodeId_))
+ Graph_.createEdge(nid, node_info.NodeId_);
+ }
+ else if (node_info.NodeType_ == DGraph::kAbsent)
+ addToPendingList(le, nid);
+ }
+ else if (le->isRelease())
+ Graph_.addToNodeInfoMap(le, nid, DGraph::kAvail);
+}
+
+DGraph::NodeInfo DGraph::getTargetNodeInfo(LogEntry *tgt_le)
+{
+#ifdef _FORCE_FAIL
+ fail_program();
+#endif
+ NodeInfoMap::const_iterator ci = NodeInfoMap_.find(tgt_le);
+ if (ci == NodeInfoMap_.end())
+ return NodeInfo(static_cast(0) /* dummy */, kAbsent);
+ else return ci->second;
+}
+
+void DGraph::addToNodeInfoMap(LogEntry *le, VDesc nid, NodeType node_type)
+{
+#ifdef _FORCE_FAIL
+ fail_program();
+#endif
+ assert(node_type == kAvail); // currently
+ NodeInfoMap_.insert(std::make_pair(le, NodeInfo(nid, node_type)));
+}
+
+void DGraph::trace()
+{
+#ifdef _FORCE_FAIL
+ fail_program();
+#endif
+ std::pair vp;
+ for (vp = vertices(DirectedGraph_); vp.first != vp.second; ++ vp.first)
+ {
+ VDesc nid = *vp.first;
+ FASection *fase = DirectedGraph_[nid].Fase_;
+
+ traceHelper("======================\n");
+ traceHelper("\tNode id: ");
+ traceHelper(nid);
+ traceHelper("\tFASE: ");
+ traceHelper(fase);
+ traceHelper(" isStable: ");
+ traceHelper(DirectedGraph_[nid].isStable_);
+
+ traceHelper("\n\tHere are the log records:\n");
+ PrintLogs(fase);
+
+ std::pair iep;
+ int count = 0;
+ traceHelper("\n\tHere are the sources:\n");
+ for (iep = in_edges(nid, DirectedGraph_);
+ iep.first != iep.second; ++ iep.first)
+ {
+ EDesc eid = *iep.first;
+ VDesc src = source(eid, DirectedGraph_);
+ FASection *src_fase = DirectedGraph_[src].Fase_;
+ ++count;
+ traceHelper("\t\tNode id: ");
+ traceHelper(src);
+ traceHelper(" FASE: ");
+ traceHelper(src_fase);
+ }
+ traceHelper("\n\t# incoming edges: ");
+ traceHelper(count);
+ traceHelper('\n');
+ }
+}
+
+void DGraph::PrintLogs(FASection *fase)
+{
+ LogEntry *current_le = fase->First;
+ assert(current_le);
+
+ LogEntry *last_le = fase->Last;
+ assert(last_le);
+
+ do
+ {
+ switch(current_le->Type)
+ {
+ case LE_dummy:
+ PrintDummyLog(current_le);
+ break;
+ case LE_acquire:
+ PrintAcqLog(current_le);
+ break;
+ case LE_rwlock_rdlock:
+ PrintRdLockLog(current_le);
+ break;
+ case LE_rwlock_wrlock:
+ PrintWrLockLog(current_le);
+ break;
+ case LE_begin_durable:
+ PrintBeginDurableLog(current_le);
+ break;
+ case LE_release:
+ PrintRelLog(current_le);
+ break;
+ case LE_rwlock_unlock:
+ PrintRWUnlockLog(current_le);
+ break;
+ case LE_end_durable:
+ PrintEndDurableLog(current_le);
+ break;
+ case LE_str:
+ PrintStrLog(current_le);
+ break;
+ case LE_memset:
+ case LE_memcpy:
+ case LE_memmove:
+ PrintMemOpLog(current_le);
+ break;
+ case LE_strcpy:
+ case LE_strcat:
+ PrintStrOpLog(current_le);
+ break;
+ case LE_alloc:
+ PrintAllocLog(current_le);
+ break;
+ case LE_free:
+ PrintFreeLog(current_le);
+ break;
+ default:
+ assert(0);
+ }
+ if (current_le == last_le) break;
+ current_le = current_le->Next;
+ }while (true);
+}
+
+// TODO The following should call a LogEntry interface with the
+// appropriate stream
+void DGraph::PrintDummyLog(LogEntry *le)
+{
+ traceHelper("\t\tle = ");
+ traceHelper(le);
+ traceHelper(" type dummy\n");
+}
+
+void DGraph::PrintAcqLog(LogEntry *le)
+{
+ traceHelper("\t\tle = ");
+ traceHelper(le);
+ traceHelper(" lock = ");
+ traceHelper(le->Addr);
+ traceHelper(" ha = ");
+ traceHelper((intptr_t*)(le->ValueOrPtr));
+ traceHelper(" type = acq next = ");
+ traceHelper(le->Next.load(std::memory_order_relaxed));
+}
+
+// TODO complete
+void DGraph::PrintRdLockLog(LogEntry *le)
+{
+ traceHelper("\t\tle = ");
+ traceHelper(le);
+ traceHelper(" lock = ");
+ traceHelper(le->Addr);
+ traceHelper(" ha = ");
+ traceHelper((intptr_t*)(le->ValueOrPtr));
+ traceHelper(" type = rw_rd next = ");
+ traceHelper(le->Next.load(std::memory_order_relaxed));
+}
+
+// TODO complete
+void DGraph::PrintWrLockLog(LogEntry *le)
+{
+ traceHelper("\t\tle = ");
+ traceHelper(le);
+ traceHelper(" lock = ");
+ traceHelper(le->Addr);
+ traceHelper(" ha = ");
+ traceHelper((intptr_t*)(le->ValueOrPtr));
+ traceHelper(" type = rw_wr next = ");
+ traceHelper(le->Next.load(std::memory_order_relaxed));
+}
+
+void DGraph::PrintBeginDurableLog(LogEntry *le)
+{
+ traceHelper("\t\tle = ");
+ traceHelper(le);
+ traceHelper(" type = begin_durable next = ");
+ traceHelper(le->Next.load(std::memory_order_relaxed));
+}
+
+void DGraph::PrintRelLog(LogEntry *le)
+{
+ assert(!le->ValueOrPtr);
+ traceHelper("\t\tle = ");
+ traceHelper(le);
+ traceHelper(" lock = ");
+ traceHelper(le->Addr);
+ traceHelper(" type = rel next = ");
+ traceHelper(le->Next.load(std::memory_order_relaxed));
+}
+
+// TODO complete
+void DGraph::PrintRWUnlockLog(LogEntry *le)
+{
+ assert(!le->ValueOrPtr);
+ traceHelper("\t\tle = ");
+ traceHelper(le);
+ traceHelper(" lock = ");
+ traceHelper(le->Addr);
+ traceHelper(" type = rw_unlock next = ");
+ traceHelper(le->Next.load(std::memory_order_relaxed));
+}
+
+void DGraph::PrintEndDurableLog(LogEntry *le)
+{
+ traceHelper("\t\tle = ");
+ traceHelper(le);
+ traceHelper(" type = end_durable next = ");
+ traceHelper(le->Next.load(std::memory_order_relaxed));
+}
+
+void DGraph::PrintStrLog(LogEntry *le)
+{
+ traceHelper("\t\tle = ");
+ traceHelper(le);
+ traceHelper(" addr = ");
+ traceHelper(le->Addr);
+ traceHelper(" val = ");
+ traceHelper(le->ValueOrPtr);
+ traceHelper(" size = ");
+ traceHelper(le->Size);
+ traceHelper(" type = str next = ");
+ traceHelper(le->Next.load(std::memory_order_relaxed));
+}
+
+// TODO complete
+void DGraph::PrintMemOpLog(LogEntry *le)
+{
+ traceHelper("\t\tle = ");
+ traceHelper(le);
+ traceHelper(" addr = ");
+ traceHelper(le->Addr);
+ traceHelper(" size = ");
+ traceHelper(le->Size);
+ traceHelper(" type = memop next = ");
+ traceHelper(le->Next.load(std::memory_order_relaxed));
+}
+
+// TODO complete
+void DGraph::PrintStrOpLog(LogEntry *le)
+{
+ traceHelper("\t\tle = ");
+ traceHelper(le);
+ traceHelper(" addr = ");
+ traceHelper(le->Addr);
+ traceHelper(" size = ");
+ traceHelper(le->Size);
+ traceHelper(" type = strop next = ");
+ traceHelper(le->Next.load(std::memory_order_relaxed));
+}
+
+void DGraph::PrintAllocLog(LogEntry *le)
+{
+ traceHelper("\t\tle = ");
+ traceHelper(le);
+ traceHelper(" addr = ");
+ traceHelper(le->Addr);
+ traceHelper(" val = ");
+ traceHelper((void*)le->ValueOrPtr);
+ traceHelper(" size = ");
+ traceHelper(le->Size);
+ traceHelper(" type = alloc next = ");
+ traceHelper(le->Next.load(std::memory_order_relaxed));
+}
+
+void DGraph::PrintFreeLog(LogEntry *le)
+{
+ traceHelper("\t\tle = ");
+ traceHelper(le);
+ traceHelper(" addr = ");
+ traceHelper(le->Addr);
+ traceHelper(" val = ");
+ traceHelper((void*)le->ValueOrPtr);
+ traceHelper(" size = ");
+ traceHelper(le->Size);
+ traceHelper(" type = free next = ");
+ traceHelper(le->Next.load(std::memory_order_relaxed));
+}
+
+} // namespace Atlas
diff --git a/ARP_CSFR/runtime/src/consistency/helper_driver.cpp b/ARP_CSFR/runtime/src/consistency/helper_driver.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..f34c8f2e58f54d8e8202ab1c2996dd3f2926438d
--- /dev/null
+++ b/ARP_CSFR/runtime/src/consistency/helper_driver.cpp
@@ -0,0 +1,184 @@
+/*
+ * (c) Copyright 2016 Hewlett Packard Enterprise Development LP
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version. This program is
+ * distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details. You should have received a copy of the GNU Lesser
+ * General Public License along with this program. If not, see
+ * .
+ */
+
+
+#include
+#include
+#include
+
+#include "atlas_api.h"
+
+#include "helper.hpp"
+#include "log_mgr.hpp"
+#include "consistency_mgr.hpp"
+
+namespace Atlas {
+
+uint64_t removed_log_count = 0;
+
+Helper *Helper::Instance_{nullptr};
+
+void *helper(void *arg_lsp)
+{
+#ifdef _FORCE_FAIL
+ fail_program();
+#endif
+#ifdef _DISABLE_HELPER
+ return nullptr;
+#endif
+
+ Helper::createInstance();
+ Helper::getInstance().doConsistentUpdate(arg_lsp);
+
+ if (!arg_lsp) Helper::getInstance().printStats();
+
+#if defined(_NVM_TRACE) || defined(_NVM_VERBOSE_TRACE)
+ std::cout <<
+ "[Atlas-log-pruner] Traces written to /tmp/atlas_log_pruner.txt" <<
+ std::endl;
+#endif
+
+ Helper::deleteInstance();
+
+ std::cout << "[Atlas-log-pruner] # log entries removed: " <<
+ removed_log_count << std::endl;
+ return 0;
+}
+
+void Helper::collectRelLogEntries(LogStructure *lsp)
+{
+#ifdef _FORCE_FAIL
+ fail_program();
+#endif
+ while (lsp) {
+ LogEntry *le = lsp->Le;
+ while (le) {
+ if (le->isRelease()) // TODO: how about free and other rel types?
+ ExistingRelMap_.insert(std::make_pair(le, (uint64_t)le->Size));
+ le = le->Next;
+ }
+ lsp = lsp->Next;
+ }
+}
+
+void Helper::doConsistentUpdate(void *arg_lsp)
+{
+#ifdef _FORCE_FAIL
+ fail_program();
+#endif
+ // During normal execution, the argument is NULL.
+ if (arg_lsp)
+ {
+ fprintf(stderr,
+ "[Atlas] Advancing consistent state before undoing ...\n");
+ collectRelLogEntries((LogStructure*)arg_lsp);
+ }
+
+// Have the helper thread work in _small_ chunks. Given that an
+// iteration of the helper thread can be quite expensive, we want to
+// make sure that the helper thread can be joined as soon as the user
+// thread is done. An alternative is for the user thread to send a signal
+// to the helper thread.
+
+ do {
+
+ ++IterNum_;
+
+ LogStructure *lsp = 0;
+
+ if (!arg_lsp) {
+ LogMgr::getInstance().acquireLogReadyLock();
+ // We don't want to check this condition within a loop since we
+ // need to do some work. If a spurious wakeup happens and that
+ // should be rare, the helper thread may go through a round of
+ // analysis that may or may not result in wasted work.
+ if (!areUserThreadsDone()) LogMgr::getInstance().waitLogReady();
+ LogMgr::getInstance().releaseLogReadyLock();
+
+ if (areUserThreadsDone()) break;
+
+ lsp = LogMgr::getInstance().getLogPointer(
+ std::memory_order_acquire);
+ }
+ else if (!LogMgr::getInstance().getRecoveryLogPointer(
+ std::memory_order_acquire)) {
+ IsInRecovery_ = true;
+ lsp = (LogStructure*)arg_lsp;
+ LogMgr::getInstance().setRecoveryLogPointer(
+ lsp, std::memory_order_release);
+ }
+ else lsp = LogMgr::getInstance().getRecoveryLogPointer(
+ std::memory_order_acquire);
+
+ // Can't assert during normal execution since a spurious wakeup
+ // may have happened
+ if (!arg_lsp && !lsp) continue;
+
+ CSMgr& cs_mgr = CSMgr::createInstance();
+ if (IsInRecovery_)
+ cs_mgr.set_existing_rel_map(&ExistingRelMap_);
+ cs_mgr.doConsistentUpdate(lsp, &LogVersions_, IsInRecovery_);
+
+ if (IsInRecovery_ && !cs_mgr.get_num_graph_vertices()) {
+ CSMgr::deleteInstance();
+ break;
+ }
+
+ CSMgr::deleteInstance();
+
+ }while (!areUserThreadsDone());
+}
+
+bool Helper::isDeletedByHelperThread(LogEntry *le, uint64_t gen_num)
+{
+#ifdef _FORCE_FAIL
+ fail_program();
+#endif
+ std::pair del_iter = DeletedRelLogs_.equal_range(le);
+ for (DelIter di = del_iter.first; di != del_iter.second; ++di) {
+ if (di->second == gen_num) {
+ DeletedRelLogs_.erase(di);
+ // Must return since the iterator is broken by the above erase.
+ // Any subsequent use of the iterator may fail.
+ return true;
+ }
+ }
+ return false;
+}
+
+void Helper::printStats()
+{
+ // TODO The lock should be owned by Stats, not Logger
+#if defined(NVM_STATS)
+ LogMgr::getInstance().acquireStatsLock();
+ std::cout << "[Atlas-log-pruner] Thread " << pthread_self() << std::endl;
+#ifdef _PROFILE_HT
+ std::cout << "[Atlas-log-pruner] " << "Total graph creation cycles: " <<
+ TotalGraphBuildTime_ << std::endl;
+ std::cout << "[Atlas-log-pruner] " << "Total graph resolution cycles: " <<
+ TotalGraphResolveTime_ << std::endl;
+ std::cout << "[Atlas-log-pruner] " << "Total log prune cycles: " <<
+ TotalPruneTime_ << std::endl;
+#endif
+ std::cout << "[Atlas-log-pruner] # iterations: " <<
+ Helper::getInstance().get_iter_num() << std::endl;
+ std::cout << "[Atlas-log-pruner] # flushes from this thread: " <<
+ num_flushes << std::endl;
+ LogMgr::getInstance().releaseStatsLock();
+#endif
+}
+
+} // namespace Atlas
+
diff --git a/ARP_CSFR/runtime/src/consistency/log_pruner.cpp b/ARP_CSFR/runtime/src/consistency/log_pruner.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..36dad12de8a8f12cdf52ca1eb2b8db8356948368
--- /dev/null
+++ b/ARP_CSFR/runtime/src/consistency/log_pruner.cpp
@@ -0,0 +1,527 @@
+/*
+ * (c) Copyright 2016 Hewlett Packard Enterprise Development LP
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version. This program is
+ * distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details. You should have received a copy of the GNU Lesser
+ * General Public License along with this program. If not, see
+ * .
+ */
+
+
+#include "atlas_alloc.h"
+
+#include "consistency_mgr.hpp"
+#include "helper.hpp"
+
+namespace Atlas {
+
+extern uint64_t removed_log_count;
+
+bool CSMgr::areLogicallySame(LogStructure *gh, LogStructure *cand_gh)
+{
+#ifdef _FORCE_FAIL
+ fail_program();
+#endif
+ while (gh) {
+ if (gh == cand_gh) return true;
+ gh = gh->Next;
+ }
+ return false;
+}
+
+uint32_t CSMgr::getNumNewEntries(LogStructure *new_e, LogStructure *old_e)
+{
+#ifdef _FORCE_FAIL
+ fail_program();
+#endif
+ uint32_t new_count = 0;
+ uint32_t old_count = 0;
+ while (new_e) {
+ ++new_count;
+ new_e = new_e->Next;
+ }
+ while (old_e) {
+ ++old_count;
+ old_e = old_e->Next;
+ }
+ assert(!(new_count < old_count));
+ return new_count - old_count;
+}
+
+void CSMgr::destroyLogs(Helper::LogVersions *log_v)
+{
+#ifdef _FORCE_FAIL
+ fail_program();
+#endif
+ // Nothing to do
+ if (!log_v->size()) return;
+
+#if defined(NVM_STATS) && defined(_PROFILE_HT)
+ uint64_t start_log_prune = atlas_rdtsc();
+#endif
+
+ LogIterVec deleted_lsp;
+ LogEntryVec deleted_log_entries;
+
+ LogStructure *cand_gh = 0;
+ Helper::LogVersions::iterator logs_ci_end = log_v->end();
+ Helper::LogVersions::iterator logs_ci = log_v->begin();
+ Helper::LogVersions::iterator last_logs_ci = logs_ci_end;
+
+#if defined(_FLUSH_GLOBAL_COMMIT) && !defined(DISABLE_FLUSHES) && \
+ !defined(_DISABLE_DATA_FLUSH)
+ bool did_cas_succeed = true;
+#endif
+
+ // Go through each version
+ while (logs_ci != logs_ci_end) {
+ // Get the current pointer to the log
+ LogStructure *gh = !CSMgr::getInstance().isInRecovery() ?
+ LogMgr::getInstance().getLogPointer(std::memory_order_acquire) :
+ LogMgr::getInstance().getRecoveryLogPointer(
+ std::memory_order_acquire);
+ assert(gh);
+
+ LogStructure *tmp_gh = gh;
+
+ // This is the candidate pointer to the log representing the
+ // new consistent state. We would like to move the log pointer
+ // to this candidate in a single pointer switch
+ // (failure-atomically), essentially moving the program state
+ // to the next consistent state.
+ cand_gh = (*logs_ci).LS_;
+ assert(cand_gh);
+ LogStructure *tmp_cand_gh = cand_gh;
+
+ const Log2Bool& deletable_logs = (*logs_ci).Del_;
+
+ // Initially, gh is not part of log_v. But if a new gh is formed,
+ // gh may actually be the same as cand_gh. In such a case, we just
+ // need to skip to the next candidate. Additionally, we need to
+ // check for logical identity, meaning that if logs for a new thread
+ // were added in between "setting the GH last by the helper thread"
+ // and "setting the GH by an application thread because of a new
+ // thread creation", we need to identify that scenario as well.
+ if (areLogicallySame(gh, cand_gh)) {
+ last_logs_ci = logs_ci;
+ ++logs_ci;
+ continue;
+ }
+
+ // Since the time of creation of cand_gh, entries may have been
+ // added at the head of gh. By comparing the number of
+ // *threads*, we can tell whether this has indeed happened. If
+ // yes, the new entries are always found at the head.
+ uint32_t num_new_entries = getNumNewEntries(tmp_gh, tmp_cand_gh);
+
+ // We can't just use "deletable_logs" to collect logs for
+ // removal since the elements in "deletable_logs" may have
+ // been split into different versions. For removal purposes,
+ // we need to collect for only the versions that can be
+ // removed.
+ LogEntryVec tmp_deleted_log_entries;
+ LSVec new_entries;
+ while (tmp_gh) {
+ if (num_new_entries) {
+ new_entries.push_back(tmp_gh);
+ tmp_gh = tmp_gh->Next;
+ // Do not advance tmp_cand_gh
+ --num_new_entries;
+ continue;
+ }
+
+ LogEntry *curr_le = tmp_gh->Le;
+
+ assert(tmp_cand_gh);
+ LogEntry *end_le = tmp_cand_gh->Le;
+ assert(end_le);
+
+ do
+ {
+ assert(curr_le);
+
+ // Both creation/destruction of threads during log
+ // pruning are supported.
+
+ // Check whether this log entry is scheduled to be
+ // deleted. The cumulative list of deletable
+ // log entries is found for every version and that is
+ // used to check here.
+
+ if (deletable_logs.find(curr_le) == deletable_logs.end())
+ break;
+
+ // Add it tentatively to the list of logs to be
+ // deleted
+ tmp_deleted_log_entries.push_back(curr_le);
+
+ // This Next ptr has been read before, so no atomic
+ // operation is required.
+ curr_le = curr_le->Next;
+ }while (curr_le != end_le);
+
+ // We compare the number of headers in GH and cand_GH and
+ // if unequal, the difference at the head of GH are the
+ // new entries. For this to work, insertions must always
+ // be made at the head.
+ tmp_gh = tmp_gh->Next;
+ tmp_cand_gh = tmp_cand_gh->Next;
+ }
+
+ // If new_entries have been found, we need to add those entries
+ // to this version before deleting it.
+
+ if (new_entries.size()) {
+ fixupNewEntries(&cand_gh, new_entries);
+ (*logs_ci).LS_ = cand_gh;
+ }
+
+#if defined(_FLUSH_GLOBAL_COMMIT) && !defined(DISABLE_FLUSHES) && \
+ !defined(_DISABLE_DATA_FLUSH)
+ if (did_cas_succeed) flushGlobalCommit(tmp_deleted_log_entries);
+#endif
+
+ // Atomically flip the global log structure header pointer
+
+ // Note that cache line flushing for this CAS is tricky. The current
+ // ad-hoc solution is for user-threads to flush this
+ // location after reading it. Since reads of this location are
+ // rare enough, this should not hurt performance.
+ bool status = !CSMgr::getInstance().isInRecovery() ?
+ LogMgr::getInstance().cmpXchngWeakLogPointer(
+ gh, cand_gh,
+ std::memory_order_acq_rel, std::memory_order_relaxed) :
+ LogMgr::getInstance().cmpXchngWeakRecoveryLogPointer(
+ gh, cand_gh,
+ std::memory_order_acq_rel, std::memory_order_relaxed);
+
+ if (status)
+ {
+#if !defined(_DISABLE_LOG_FLUSH) && !defined(DISABLE_FLUSHES)
+ if (!CSMgr::getInstance().isInRecovery())
+ LogMgr::getInstance().flushLogPointer();
+ else LogMgr::getInstance().flushRecoveryLogPointer();
+#endif
+
+#if defined(_FLUSH_GLOBAL_COMMIT) && !defined(DISABLE_FLUSHES) && \
+ !defined(_DISABLE_DATA_FLUSH)
+ did_cas_succeed = true;
+#endif
+ // During the first time through the top-level vector elements,
+ // gh is not in log_v. So this special handling must be done
+ // where we are destroying the old gh that is not in the vector.
+ if (logs_ci == log_v->begin()) destroyLS(gh);
+ else {
+ assert(last_logs_ci != logs_ci_end);
+ deleted_lsp.push_back(last_logs_ci);
+ }
+
+ // This builds the list of log entries which *will* be
+ // deleted
+ copyDeletedLogEntries(&deleted_log_entries,
+ tmp_deleted_log_entries);
+ last_logs_ci = logs_ci;
+ ++logs_ci;
+ }
+#if defined(_FLUSH_GLOBAL_COMMIT) && !defined(DISABLE_FLUSHES) && \
+ !defined(_DISABLE_DATA_FLUSH)
+ else did_cas_succeed = false;
+#endif
+ // If the above CAS failed, we don't advance the version but
+ // instead try again.
+ }
+
+ // Once the root GH pointer has been swung, it does not matter when
+ // the log entries are removed or the other stuff is removed. No one can
+ // reach these any more.
+ destroyLogEntries(deleted_log_entries);
+
+ // No need for any cache flushes for any deletions.
+
+ LogIterVec::iterator del_ci_end = deleted_lsp.end();
+ LogIterVec::iterator del_ci = deleted_lsp.begin();
+ LogIterVec::iterator last_valid_ci;
+ for (; del_ci != del_ci_end; ++ del_ci)
+ {
+ destroyLS((**del_ci).LS_);
+ last_valid_ci = del_ci;
+ }
+
+ del_ci = deleted_lsp.begin();
+ if (del_ci != del_ci_end)
+ {
+ Helper::LogVersions::iterator lvi = *last_valid_ci;
+ assert(lvi != log_v->end());
+ ++lvi;
+ (*log_v).erase(*del_ci, lvi);
+ }
+#if defined(NVM_STATS) && defined(_PROFILE_HT)
+ uint64_t stop_log_prune = atlas_rdtsc();
+ Helper::getInstance().incrementTotalPruneTime(
+ stop_log_prune - start_log_prune);
+#endif
+}
+
+void CSMgr::destroyLS(LogStructure *lsp)
+{
+#ifdef _FORCE_FAIL
+ fail_program();
+#endif
+ assert(lsp);
+ if (!CSMgr::getInstance().isInRecovery())
+ assert(lsp != LogMgr::getInstance().getLogPointer(
+ std::memory_order_acquire));
+ else assert(lsp != LogMgr::getInstance().getRecoveryLogPointer(
+ std::memory_order_acquire));
+
+ traceHelper("[Atlas] Destroying log header ");
+
+ while (lsp)
+ {
+ LogStructure *del_lsp = lsp;
+ lsp = lsp->Next;
+
+ traceHelper(del_lsp);
+
+ // TODO freeMem should call destructor. Use NVM_Destroy
+ if (!CSMgr::getInstance().isInRecovery())
+ PRegionMgr::getInstance().freeMem(del_lsp, true /* do not log */);
+ }
+ traceHelper('\n');
+}
+
+void CSMgr::destroyLogEntries(const LogEntryVec& le_vec)
+{
+#ifdef _FORCE_FAIL
+ fail_program();
+#endif
+ traceHelper("[Atlas] Destroying log entries ");
+
+ LogEntryVec::const_iterator ci_end = le_vec.end();
+ for (LogEntryVec::const_iterator ci = le_vec.begin(); ci != ci_end; ++ ci)
+ {
+ traceHelper(*ci);
+
+ if ((*ci)->isRelease() || (*ci)->isRWLockUnlock() || (*ci)->isFree())
+ {
+ // Add it to a helper map so that the helper elides any
+ // happens-after relation from a later-examined log entry
+ // to this one
+ Helper::getInstance().addEntryToDeletedMap(*ci, (*ci)->Size);
+
+ // Update the logger table that tracks happens-after
+ // between log entries
+ if (!CSMgr::getInstance().isInRecovery()) LogMgr::getInstance().deleteOwnerInfo(*ci);
+ }
+
+ if (!CSMgr::getInstance().isInRecovery())
+ {
+#if defined(_LOG_WITH_MALLOC)
+ if ((*ci)->isMemop() || (*ci)->isStrop())
+ free((void*)(*ci)->ValueOrPtr);
+ free(*ci);
+#elif defined(_LOG_WITH_NVM_ALLOC)
+ if ((*ci)->isMemop() || (*ci)->isStrop())
+ PRegionMgr::getInstance().freeMem((void*)(*ci)->ValueOrPtr, true);
+ PRegionMgr::getInstance().freeMem(*ci, true /* do not log */);
+#else
+ if ((*ci)->isMemop() || (*ci)->isStrop())
+ PRegionMgr::getInstance().freeMem((void*)(*ci)->ValueOrPtr, true);
+ // TODO cache LogMgr instance
+ LogMgr::getInstance().deleteEntry(*ci);
+#endif
+ }
+ ++removed_log_count;
+ }
+
+ traceHelper('\n');
+}
+
+void CSMgr::copyDeletedLogEntries(LogEntryVec *deleted_les,
+ const LogEntryVec & tmp_deleted_les)
+{
+#ifdef _FORCE_FAIL
+ fail_program();
+#endif
+ LogEntryVec::const_iterator ci_end = tmp_deleted_les.end();
+ for (LogEntryVec::const_iterator ci = tmp_deleted_les.begin();
+ ci != ci_end; ++ ci)
+ (*deleted_les).push_back(*ci);
+}
+
+void CSMgr::fixupNewEntries(LogStructure **cand, const LSVec & new_entries)
+{
+#ifdef _FORCE_FAIL
+ fail_program();
+#endif
+ LogStructure *new_header = 0;
+ LogStructure *last_ls = 0;
+ LSVec::const_iterator ci_end = new_entries.end();
+
+ traceHelper("[Atlas] Fixup: created header nodes: ");
+ for (LSVec::const_iterator ci = new_entries.begin(); ci != ci_end; ++ci)
+ {
+ LogStructure *ls = (LogStructure *)
+ nvm_alloc(sizeof(LogStructure),
+ LogMgr::getInstance().getRegionId());
+ assert(ls);
+
+ traceHelper(ls);
+ traceHelper(" ");
+
+ ls->Le = (*ci)->Le;
+#if !defined(_DISABLE_LOG_FLUSH) && !defined(DISABLE_FLUSHES)
+ NVM_FLUSH_ACQ(ls);
+#endif
+ if (!new_header) new_header = ls;
+ else
+ {
+ assert(last_ls);
+ last_ls->Next = ls;
+#if !defined(_DISABLE_LOG_FLUSH) && !defined(DISABLE_FLUSHES)
+ NVM_FLUSH_ACQ(&last_ls->Next);
+#endif
+ }
+ last_ls = ls;
+ }
+
+ traceHelper('\n');
+
+ last_ls->Next = *cand;
+#if !defined(_DISABLE_LOG_FLUSH) && !defined(DISABLE_FLUSHES)
+ NVM_FLUSH_ACQ(last_ls);
+#endif
+ (*cand) = new_header;
+}
+
+// TODO: the region may have been closed by this point. One solution is
+// to check whether the address belongs to an open region before every
+// clflush operation. This would slow down the helper thread but probably
+// does not matter. Additionally, more logic needs to be employed in the
+// helper thread in the global-flush mode so that if an address in a closed
+// region is seen, the helper thread has to stop since no new consistent
+// state can be found. This is tied with the observation that in this
+// global mode, the consistent state cannot be moved forward during the
+// recovery phase.
+#if defined(_FLUSH_GLOBAL_COMMIT) && !defined(DISABLE_FLUSHES)
+// This is not thread-safe. Currently, only the serial helper thread
+// can call this interface.
+void CSMgr::flushGlobalCommit(const LogEntryVec& logs)
+{
+#ifdef _FORCE_FAIL
+ fail_program();
+#endif
+ assert(GlobalFlush_);
+ assert(GlobalFlush_->empty());
+ LogEntryVec::const_iterator ci_end = logs.end();
+ for (LogEntryVec::const_iterator ci = logs.begin(); ci != ci_end; ++ci)
+ if ((*ci)->isStr() || (*ci)->isMemop() || (*ci)->isStrop())
+ LogMgr::getInstance().collectCacheLines(
+ GlobalFlush_, (*ci)->Addr, (*ci)->Size);
+ LogMgr::getInstance().flushCacheLines(*GlobalFlush_);
+ GlobalFlush_->clear();
+}
+
+#endif
+
+template
+void LogMgr::deleteSlot(CbLog *cb, T *addr)
+{
+#ifdef _FORCE_FAIL
+ fail_program();
+#endif
+ assert(!cb->isEmpty());
+ if(addr!=&(cb->LogArray[cb->Start.load(std::memory_order_acquire)])) {
+ std:: cout << addr << ":" << &(cb->LogArray[cb->Start.load(std::memory_order_acquire)]) << std::endl;
+ std::cout << std::flush;
+ }
+ assert(addr == &(cb->LogArray[cb->Start.load(std::memory_order_acquire)]));
+ cb->Start.store(
+ (cb->Start.load(std::memory_order_acquire)+1) % cb->Size,
+ std::memory_order_release);
+}
+
+
+
+//FIXME: Inspect of last_cb_used can improve performance here, not using it right now.
+void LogMgr::deleteEntry(const std::atomic*> & cb_list, LogEntry *addr, CbListNode* &last_cb_used)
+{
+#ifdef _FORCE_FAIL
+ fail_program();
+#endif
+ // Instead of searching every time, we keep track of the last Cb used.
+// static CbListNode *last_cb_used = 0;
+// CbListNode *last_cb_used = 0;
+// if (last_cb_used &&
+// ((uintptr_t)addr >= (uintptr_t)last_cb_used->StartAddr &&
+// (uintptr_t)addr <= (uintptr_t)last_cb_used->EndAddr)) {
+// deleteSlot(last_cb_used->Cb, addr);
+// if (last_cb_used->Cb->isEmpty() &&
+// last_cb_used->Cb->isFilled.load(std::memory_order_acquire))
+// last_cb_used->isAvailable.store(true, std::memory_order_release);
+// return;
+// }
+ CbListNode *curr = cb_list.load(std::memory_order_acquire);
+ assert(curr);
+ while (curr) {
+ if ((uintptr_t)addr >= (uintptr_t)curr->StartAddr &&
+ (uintptr_t)addr <= (uintptr_t)curr->EndAddr) {
+// last_cb_used = curr;
+ deleteSlot(curr->Cb, addr);
+ // A buffer that got filled and then emptied implies that
+ // the user thread moved on to a new buffer. Hence, mark it
+ // available so that it can be reused.
+ if (curr->Cb->isEmpty() &&
+ curr->Cb->isFilled.load(std::memory_order_acquire))
+ curr->isAvailable.store(true, std::memory_order_release);
+ break;
+ }
+ curr = curr->Next;
+ }
+}
+
+
+template
+void LogMgr::deleteEntry(const std::atomic*> & cb_list, T *addr)
+{
+#ifdef _FORCE_FAIL
+ fail_program();
+#endif
+ // Instead of searching every time, we keep track of the last Cb used.
+ static CbListNode *last_cb_used = 0;
+// CbListNode *last_cb_used = 0;
+ if (last_cb_used &&
+ ((uintptr_t)addr >= (uintptr_t)last_cb_used->StartAddr &&
+ (uintptr_t)addr <= (uintptr_t)last_cb_used->EndAddr)) {
+ deleteSlot(last_cb_used->Cb, addr);
+ if (last_cb_used->Cb->isEmpty() &&
+ last_cb_used->Cb->isFilled.load(std::memory_order_acquire))
+ last_cb_used->isAvailable.store(true, std::memory_order_release);
+ return;
+ }
+ CbListNode *curr = cb_list.load(std::memory_order_acquire);
+ assert(curr);
+ while (curr) {
+ if ((uintptr_t)addr >= (uintptr_t)curr->StartAddr &&
+ (uintptr_t)addr <= (uintptr_t)curr->EndAddr) {
+ last_cb_used = curr;
+ deleteSlot(curr->Cb, addr);
+ // A buffer that got filled and then emptied implies that
+ // the user thread moved on to a new buffer. Hence, mark it
+ // available so that it can be reused.
+ if (curr->Cb->isEmpty() &&
+ curr->Cb->isFilled.load(std::memory_order_acquire))
+ curr->isAvailable.store(true, std::memory_order_release);
+ break;
+ }
+ curr = curr->Next;
+ }
+}
+
+} // namespace Atlas
diff --git a/ARP_CSFR/runtime/src/include/atlas_alloc.h b/ARP_CSFR/runtime/src/include/atlas_alloc.h
new file mode 100644
index 0000000000000000000000000000000000000000..46ea81ce1472858602d0034800af5eee4bad9be0
--- /dev/null
+++ b/ARP_CSFR/runtime/src/include/atlas_alloc.h
@@ -0,0 +1,194 @@
+/*
+ * (c) Copyright 2016 Hewlett Packard Enterprise Development LP
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version. This program is
+ * distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details. You should have received a copy of the GNU Lesser
+ * General Public License along with this program. If not, see
+ * .
+ */
+
+
+#ifndef ATLAS_ALLOC_H
+#define ATLAS_ALLOC_H
+
+#include
+#include
+#include
+
+//
+// Persistent region API
+// These are interfaces for creating and managing persistent regions,
+// entities that contain persistent data. Once a persistent region is
+// created, objects can be allocated out of the region, e.g. by using
+// nvm_alloc. Any data not in a persistent region is considered
+// transient.
+//
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+///
+/// @brief Create a named persistent region.
+/// @param name Name of the persistent region
+/// @param flags access flag (one of O_RDONLY, O_WRONLY, O_RDWR)
+/// @return Id of the region created
+///
+/// This interface does not check for an existing entry with
+/// the same name. If a region with the same name already exists, the
+/// behavior of the program is undefined.
+///
+uint32_t NVM_CreateRegion(const char *name, int flags);
+
+///
+/// @brief Create a persistent region with the provided name.
+/// @param name Name of the persistent region
+/// @param flags access flag (one of O_RDONLY, O_WRONLY, O_RDWR)
+/// @param is_created Indicator whether the region got created as a
+/// result of the call
+/// @return Id of the region found or created
+///
+/// If the region already exists, the existing id of the region is returned.
+/// Otherwise a region is created and its newly assigned id returned.
+///
+uint32_t NVM_FindOrCreateRegion(const char *name, int flags, int *is_created);
+
+///
+/// @brief Find the id of a region when it is known to exist already
+/// @param name Name of the persistent region
+/// @param flags access flag (one of O_RDONLY, O_WRONLY, O_RDWR)
+/// @return Id of the region found
+///
+/// This interface should be used over NVM_FindOrCreateRegion for
+/// efficiency reasons if the region is known to exist. If a region
+/// with the provided name does not exist, an assertion failure will
+/// occur.
+///
+uint32_t NVM_FindRegion(const char *name, int flags);
+
+///
+/// @brief Delete the region with the provided name.
+/// @param name Name of the persistent region
+///
+/// Use this interface to completely destroy a region. If the region
+/// does not exist, an assertion failure will occur.
+///
+void NVM_DeleteRegion(const char *name);
+
+///
+/// @brief Close a persistent region
+/// @param rid Region id
+///
+/// After closing, it won't be available to the calling process
+/// without calling NVM_FindOrCreateRegion. The region will stay in
+/// NVM even after calling this interface. This interface allows
+/// closing a region with normal bookkeeping.
+///
+void NVM_CloseRegion(uint32_t rid);
+
+///
+/// @brief Get the root pointer of the persistent region
+/// @param rid Region id
+/// @return Root pointer of the region
+///
+/// The region must have been created already. Currently, only one
+/// root is implemented for a given region. The idea is that anything
+/// within a region that is not reachable from the root after program
+/// termination is assumed to be garbage and can be recycled. During
+/// execution, anything within a region that is not reachable from the
+/// root or from other _roots_ (in the GC sense) is assumed to be
+/// garbage as well.
+///
+void *NVM_GetRegionRoot(uint32_t rid);
+
+///
+/// @brief Set the root pointer of an existing persistent region
+/// @param rid Region id
+/// @param root The new root of the region
+///
+void NVM_SetRegionRoot(uint32_t rid, void *root);
+
+///
+/// @brief Determines if a memory location is within a region
+/// @param ptr Queried address
+/// @param sz Size of the location in bytes
+/// @return 1 if within the region, otherwise 0
+///
+int NVM_IsInRegion(void *ptr, size_t sz);
+
+///
+/// @brief Determines if the addresses are on different cache lines
+///
+/// @param p1 First address
+/// @param p2 Second address
+/// @return Indicates whether the addresses are on different cache
+/// lines
+///
+/// The objects under consideration must not cross cache lines,
+/// otherwise this interface is inadequate.
+///
+int isOnDifferentCacheLine(void *p1, void *p2);
+
+///
+/// @brief Determines if a memory location is aligned to a cache line
+///
+/// @param p Address of memory location under consideration
+/// @return Indicates whether the memory location is cache line
+/// aligned
+///
+int isCacheLineAligned(void *p);
+
+///
+/// @brief Malloc style interface for allocation from a persistent
+/// region
+///
+/// @param sz Size of location to be allocated
+/// @param rid Id of persistent region for allocation
+/// @return Address of memory location allocated
+///
+void *nvm_alloc(size_t sz, uint32_t rid);
+
+///
+/// @brief Calloc style interface for allocation from a persistent
+/// region
+///
+/// @param nmemb Number of elements in the array to be allocated
+/// @param sz Size of each element
+/// @param rid Id of persistent region for allocation
+/// @return Pointer to allocated memory
+///
+void *nvm_calloc(size_t nmemb, size_t sz, uint32_t rid);
+
+///
+/// @brief Realloc style interface for allocation from a persistent
+/// region
+///
+/// @param ptr Address of memory block provided
+/// @param sz New size of allocation
+/// @param rid Id of persistent region for allocation
+/// @return Pointer to re-allocated memory
+///
+void *nvm_realloc(void *ptr, size_t sz, uint32_t rid);
+
+///
+/// @brief Deallocation interface for persistent data
+///
+/// @param ptr Address of memory location to be freed.
+///
+/// Though the usual use case would be for the location to be in
+/// persistent memory, this interface will also work for transient
+/// data. The implementation is required to transparently handle
+/// this case as well.
+///
+void nvm_free(void *ptr);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/ARP_CSFR/runtime/src/include/atlas_alloc_cpp.hpp b/ARP_CSFR/runtime/src/include/atlas_alloc_cpp.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..9f201bb76c36d36ff9bc9c51c9f370e1e09324fb
--- /dev/null
+++ b/ARP_CSFR/runtime/src/include/atlas_alloc_cpp.hpp
@@ -0,0 +1,120 @@
+/*
+ * (c) Copyright 2016 Hewlett Packard Enterprise Development LP
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version. This program is
+ * distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details. You should have received a copy of the GNU Lesser
+ * General Public License along with this program. If not, see
+ * .
+ */
+
+
+#ifndef ATLAS_ALLOC_CPP_H
+#define ATLAS_ALLOC_CPP_H
+
+// Forward declarations
+namespace Atlas
+{
+ class PRegion;
+}
+
+///
+/// @brief Get a handle to a persistent region
+/// @param rid Region identifier
+/// @return Pointer to the corresponding persistent region
+///
+/// Currently, this interface is to be used by a client only for the
+/// placement new operations
+///
+Atlas::PRegion *NVM_GetRegion(uint32_t rid);
+
+///
+/// @brief Object allocation for C++
+/// @param sz Allocation size
+/// @param rgn Pointer to the region to serve the allocation from
+/// @return Pointer to memory allocated
+///
+/// This interface overloads the C++ placement new operator. The
+/// corresponding delete operation is NVM_Destroy.
+///
+void* operator new(size_t sz, Atlas::PRegion *rgn) noexcept;
+
+///
+/// @brief Array form allocation for C++, type must have explicit
+/// destructor
+/// @param sz Allocation size
+/// @param rgn Pointer to the region to serve the allocation from
+/// @return Pointer to memory allocated
+///
+/// This interface overloads the array form C++ placement new
+/// operator. The type of the array elements must have an explicit
+/// destructor. The corresponding delete operation is
+/// NVM_Destroy_Array.
+///
+void* operator new[](size_t sz, Atlas::PRegion *rgn) noexcept;
+
+///
+/// @brief Object destruction for C++
+/// @param ptr Pointer to memory to be deallocated
+///
+/// This interface should be called for destroying an object that was
+/// created from a persistent region using the single-object new
+/// operator. The implementation calls the destructor followed by
+/// actual deallocation. This interface can also be called for
+/// destroying an object that was created using the default
+/// single-object new operator. If the latter is the case, the
+/// implementation detects this situation and turns around to call the
+/// default single-object delete operator. This interface must not be
+/// called for deallocating an object created in any other way, e.g. a
+/// placement new operator where the placement address is not within a
+/// persistent region.
+///
+template static inline void NVM_Destroy(T *ptr)
+{
+ if (!ptr) return;
+ if (!NVM_IsInRegion(ptr, 1 /* dummy, since size unknown */)) {
+ delete ptr;
+ return;
+ }
+ ptr->~T();
+ void nvm_delete(void*);
+ nvm_delete(ptr);
+}
+
+///
+/// @brief Array form destruction for C++, type must have explicit
+/// destructor
+/// @param ptr Pointer to memory to be deallocated
+///
+/// This interface should be called for destroying an array of objects
+/// that was created from a persistent region using the array-form new
+/// operator. The implementation calls the destructors for all objects
+/// of the array followed by actual deallocation. Note that the type
+/// of the array elements must have an explicit destructor for this
+/// interface to work correctly. This interface can also be called for
+/// destroying an array of objects that was created using the default
+/// array-form new operator. If the latter is the case, the
+/// implementation detects this situation and turns around to call the
+/// default array-form delete operator. This interface must not be
+/// called for deallocating an object created in any other way.
+///
+template static inline void NVM_Destroy_Array(T *ptr)
+{
+ if (!ptr) return;
+ if (!NVM_IsInRegion(ptr, 1 /* dummy, since size unknown */)) {
+ delete [] ptr;
+ return;
+ }
+ char *delete_ptr = reinterpret_cast(ptr) - sizeof(size_t);
+ size_t count = *reinterpret_cast(delete_ptr);
+ for (int i=count-1; i>=0; --i) (ptr+i)->~T();
+ void nvm_delete(void*);
+ nvm_delete(delete_ptr);
+}
+
+#endif
diff --git a/ARP_CSFR/runtime/src/include/atlas_api.h b/ARP_CSFR/runtime/src/include/atlas_api.h
new file mode 100644
index 0000000000000000000000000000000000000000..e2076651a227bf3838ceb39a1db070d0b1e2f53e
--- /dev/null
+++ b/ARP_CSFR/runtime/src/include/atlas_api.h
@@ -0,0 +1,179 @@
+/*
+ * (c) Copyright 2016 Hewlett Packard Enterprise Development LP
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version. This program is
+ * distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details. You should have received a copy of the GNU Lesser
+ * General Public License along with this program. If not, see
+ * .
+ */
+
+
+#ifndef ATLAS_API_H
+#define ATLAS_API_H
+
+#include
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+//
+// Here are the APIs for initializing/finalizing Atlas. Each of the
+// following 2 interfaces must be called only once.
+
+///
+/// Initialize Atlas internal data structures. This should be
+/// called before persistent memory access.
+///
+void NVM_Initialize();
+
+///
+/// Finalize Atlas internal data structures. This should be called
+/// before normal program exit. If not called, the implementation
+/// will assume that program exit was abnormal and will require
+/// invocation of recovery before restart.
+///
+void NVM_Finalize();
+
+
+void NVM_UsrDone();
+
+
+//
+// No special interfaces are required for lock-based critical
+// sections if compiler support is available. Use the
+// compiler-plugin to take advantage of automatic instrumentation
+// of critical sections.
+//
+
+///
+/// The following 2 interfaces demarcate a failure-atomic section
+/// of code, i.e. code where persistent locations are updated and
+/// all-or-nothing behavior of those updates is required. Note that
+/// no isolation among threads is provided by these 2 interfaces.
+///
+void nvm_begin_durable();
+void nvm_end_durable();
+
+//
+// The following interfaces are for low-level programming of
+// persistent memory, where the high-level consistency support
+// afforded by Atlas is not used. Instead, persistence is explicitly
+// managed by the following interfaces.
+//
+
+///
+/// Is the following address with associated size within an open
+/// persistent region?
+///
+int NVM_IsInOpenPR(void *addr, size_t sz /* in bytes */);
+
+///
+/// Persistent sync of a range of addresses
+///
+void nvm_psync(void *addr, size_t sz /* in bytes */);
+
+///
+/// Persistent sync of a range of addresses without a trailing barrier
+///
+void nvm_psync_acq(void *addr, size_t sz /* in bytes */);
+
+// This may be invoked by a user program to print out Atlas statistics
+#ifdef NVM_STATS
+ void NVM_PrintStats();
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+// End of Atlas APIs
+
+#ifdef NVM_STATS
+extern __thread uint64_t num_flushes;
+#endif
+
+// Useful macros
+#define NVM_BEGIN_DURABLE() nvm_begin_durable()
+#define NVM_END_DURABLE() nvm_end_durable()
+
+#define NVM_CLFLUSH(p) nvm_clflush((char*)(void*)(p))
+
+#ifndef DISABLE_FLUSHES
+#define NVM_FLUSH(p) \
+ { full_fence(); \
+ NVM_CLFLUSH((p)); \
+ full_fence(); \
+ }
+
+#define NVM_FLUSH_COND(p) \
+ { if (NVM_IsInOpenPR(p, 1)) { \
+ full_fence(); \
+ NVM_CLFLUSH((p)); \
+ full_fence(); \
+ } \
+ }
+
+#define NVM_FLUSH_ACQ(p) \
+ { full_fence(); \
+ NVM_CLFLUSH(p); \
+ }
+
+#define NVM_FLUSH_ACQ_COND(p) \
+ { if (NVM_IsInOpenPR(p, 1)) { \
+ full_fence(); \
+ NVM_CLFLUSH(p); \
+ } \
+ }
+
+#define NVM_PSYNC(p1,s) nvm_psync(p1,s)
+
+#define NVM_PSYNC_COND(p1,s) \
+ { if (NVM_IsInOpenPR(p1, s)) nvm_psync(p1,s); }
+
+#define NVM_PSYNC_ACQ(p1,s) \
+ { \
+ nvm_psync_acq(p1,s); \
+ } \
+
+#define NVM_PSYNC_ACQ_COND(p1,s) \
+ { \
+ if (NVM_IsInOpenPR(p1, s)) nvm_psync_acq(p1, s); \
+ } \
+
+#else
+#define NVM_FLUSH(p)
+#define NVM_FLUSH_COND(p)
+#define NVM_FLUSH_ACQ(p)
+#define NVM_FLUSH_ACQ_COND(p)
+#define NVM_PSYNC(p1,s)
+#define NVM_PSYNC_COND(p1,s)
+#define NVM_PSYNC_ACQ(p1,s)
+#define NVM_PSYNC_ACQ_COND(p1,s)
+#endif
+
+static __inline void nvm_clflush(const void *p)
+{
+#ifndef DISABLE_FLUSHES
+#ifdef NVM_STATS
+ ++num_flushes;
+#endif
+ __asm__ __volatile__ (
+ "clflush %0 \n" : "+m" (*(char*)(p))
+ );
+#endif
+}
+
+// Used in conjunction with clflush.
+static __inline void full_fence() {
+ __asm__ __volatile__ ("mfence" ::: "memory");
+ }
+
+#endif
diff --git a/ARP_CSFR/runtime/src/internal_includes/cache_flush_configs.hpp b/ARP_CSFR/runtime/src/internal_includes/cache_flush_configs.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..3b2c08f48563e9dc62a729c259c05dbee3e4031b
--- /dev/null
+++ b/ARP_CSFR/runtime/src/internal_includes/cache_flush_configs.hpp
@@ -0,0 +1,29 @@
+/*
+ * (c) Copyright 2016 Hewlett Packard Enterprise Development LP
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version. This program is
+ * distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details. You should have received a copy of the GNU Lesser
+ * General Public License along with this program. If not, see
+ * .
+ */
+
+
+#ifndef CACHE_FLUSH_CONFIGS_HPP
+#define CACHE_FLUSH_CONFIGS_HPP
+
+namespace Atlas {
+
+const int32_t kFlushTableSize = 8;
+const int32_t kFlushTableMask = kFlushTableSize - 1;
+// TODO the following should be derived from cache line size
+const uint32_t kFlushShift = 6; // log(cache line size)
+
+} // namespace Atlas
+
+#endif
diff --git a/ARP_CSFR/runtime/src/internal_includes/circular_buffer.hpp b/ARP_CSFR/runtime/src/internal_includes/circular_buffer.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..088a038c3b1536a5ff4918e4085aa855844358b3
--- /dev/null
+++ b/ARP_CSFR/runtime/src/internal_includes/circular_buffer.hpp
@@ -0,0 +1,91 @@
+/*
+ * (c) Copyright 2016 Hewlett Packard Enterprise Development LP
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version. This program is
+ * distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details. You should have received a copy of the GNU Lesser
+ * General Public License along with this program. If not, see
+ * .
+ */
+
+
+#ifndef _LOG_ALLOC_H
+#define _LOG_ALLOC_H
+
+#include
+
+namespace Atlas {
+
+template
+struct CbLog
+{
+ explicit CbLog(uint32_t sz, uint32_t is_filled,
+ uint32_t start_cb, uint32_t end_cb)
+ : Size{sz},
+ isFilled{is_filled},
+ Start{start_cb},
+ End{end_cb},
+ LogArray{nullptr} {}
+ CbLog() = delete;
+ CbLog(const CbLog&) = delete;
+ CbLog(CbLog&&) = delete;
+ CbLog& operator=(const CbLog&) = delete;
+ CbLog& operator=(CbLog&&) = delete;
+
+ uint32_t Size;
+ std::atomic isFilled;
+ std::atomic Start;
+ std::atomic End;
+ T *LogArray;
+
+ bool isFull() {
+ return (End.load(std::memory_order_acquire)+1) % Size ==
+ Start.load(std::memory_order_acquire);
+ }
+
+ bool isEmpty() {
+ return Start.load(std::memory_order_acquire) ==
+ End.load(std::memory_order_acquire);
+ }
+};
+
+template
+struct CbListNode
+{
+ explicit CbListNode(CbLog *cb, char *start_addr, char *end_addr)
+ : Cb{cb},
+ StartAddr{start_addr},
+ EndAddr{end_addr},
+ Next{nullptr},
+ Tid{pthread_self()},
+ isAvailable{false} {}
+ CbListNode() = delete;
+ CbListNode(const CbListNode&) = delete;
+ CbListNode(CbListNode&&) = delete;
+ CbListNode& operator=(const CbListNode&) = delete;
+ CbListNode& operator=(CbListNode&&) = delete;
+
+ CbLog *Cb;
+ char *StartAddr;
+ char *EndAddr;
+ CbListNode *Next;
+ pthread_t Tid;
+ std::atomic isAvailable;
+};
+
+// CbList is a data structure shared among threads. When a new slot is
+// requested, if the current buffer is found full, the current thread
+// creates a new buffer, adds it to the CbList and
+// return the first slot from this new buffer. If a buffer ever becomes
+// empty, it can be reused. A partially empty buffer cannot be reused.
+
+// TODO eventual GC on cb_list
+
+} // namespace Atlas
+
+#endif
diff --git a/ARP_CSFR/runtime/src/internal_includes/consistency_configs.hpp b/ARP_CSFR/runtime/src/internal_includes/consistency_configs.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..dbc0c0b5abb4eeb562a3c2461d7a5b8a62f3eb0b
--- /dev/null
+++ b/ARP_CSFR/runtime/src/internal_includes/consistency_configs.hpp
@@ -0,0 +1,28 @@
+/*
+ * (c) Copyright 2016 Hewlett Packard Enterprise Development LP
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version. This program is
+ * distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details. You should have received a copy of the GNU Lesser
+ * General Public License along with this program. If not, see
+ * .
+ */
+
+
+#ifndef CONSISTENCY_CONFIGS_HPP
+#define CONSISTENCY_CONFIGS_HPP
+
+#include
+
+namespace Atlas {
+
+const uint32_t kFaseAnalysisLimit = 8;
+
+} // namespace Atlas
+
+#endif
diff --git a/ARP_CSFR/runtime/src/internal_includes/consistency_mgr.hpp b/ARP_CSFR/runtime/src/internal_includes/consistency_mgr.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..28e1245bed87603edfeb440d32b18359f2228ac0
--- /dev/null
+++ b/ARP_CSFR/runtime/src/internal_includes/consistency_mgr.hpp
@@ -0,0 +1,196 @@
+/*
+ * (c) Copyright 2016 Hewlett Packard Enterprise Development LP
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version. This program is
+ * distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details. You should have received a copy of the GNU Lesser
+ * General Public License along with this program. If not, see
+ * .
+ */
+
+
+#ifndef CONSISTENCY_MGR_HPP
+#define CONSISTENCY_MGR_HPP
+
+#include
+#include
+#include
+#include