From: Peizhao Ou Date: Wed, 18 Nov 2015 05:51:44 +0000 (-0800) Subject: edits X-Git-Url: http://plrg.eecs.uci.edu/git/?p=cdsspec-compiler.git;a=commitdiff_plain;h=8bfb40e15c5ba89454d5ac43c66baf7f3297015a;ds=sidebyside edits --- diff --git a/output/include/unrelacy.h b/output/include/unrelacy.h new file mode 100644 index 0000000..729d76f --- /dev/null +++ b/output/include/unrelacy.h @@ -0,0 +1,96 @@ +#ifndef __UNRELACY_H__ +#define __UNRELACY_H__ + +#include +#include +#include +#include +#include + +#include +#include + +#define $ + +#define ASSERT(expr) MODEL_ASSERT(expr) +#define RL_ASSERT(expr) MODEL_ASSERT(expr) + +#define RL_NEW new +#define RL_DELETE(expr) delete expr + +#define mo_seqcst memory_order_relaxed +#define mo_release memory_order_release +#define mo_acquire memory_order_acquire +#define mo_acq_rel memory_order_acq_rel +#define mo_relaxed memory_order_relaxed + +namespace rl { + + /* This 'useless' struct is declared just so we can use partial template + * specialization in our store and load functions. */ + template + struct useless { + static void store(void *addr, T val); + static T load(const void *addr); + }; + + template + struct useless { + static void store(void *addr, T val) { store_8(addr, (uint8_t)val); } + static T load(const void *addr) { return (T)load_8(addr); } + }; + + template + struct useless { + static void store(void *addr, T val) { store_16(addr, (uint16_t)val); } + static T load(const void *addr) { return (T)load_16(addr); } + }; + + template + struct useless { + static void store(void *addr, T val) { store_32(addr, (uint32_t)val); } + static T load(const void *addr) { return (T)load_32(addr); } + }; + + template + struct useless { + static void store(void *addr, T val) { store_64(addr, (uint64_t)val); } + static T load(const void *addr) { return (T)load_64(addr); } + }; + + template + struct var { + var() { useless::store(&value, 0); } + var(T v) { useless::store(&value, v); } + var(var const& r) { + value = r.value; + } + ~var() { } + + void operator = (T v) { useless::store(&value, v); } + T operator () () { return useless::load(&value); } + void operator += (T v) { + useless::store(&value, + useless::load(&value) + v); + } + bool operator == (const struct var v) const { return useless::load(&value) == useless::load(&v.value); } + + T value; + }; + + class backoff_t + { + public: + typedef int debug_info_param; + void yield(debug_info_param info) { } + void yield() { } + }; + + + typedef backoff_t backoff; + typedef backoff_t linear_backoff; + typedef backoff_t exp_backoff; + +} + +#endif /* __UNRELACY_H__ */