4 inline static void memset_2(void *dst, u16 pattern, size_t size)
7 cell cell_pattern = (pattern | (pattern << 16));
8 memset_pattern4(dst,&cell_pattern,size);
14 u16 *start = (u16 *)dst;
15 u16 *end = (u16 *)((cell)dst + size);
25 inline static void memset_cell(void *dst, cell pattern, size_t size)
29 memset_pattern8(dst,&pattern,size);
31 memset_pattern4(dst,&pattern,size);
38 cell *start = (cell *)dst;
39 cell *end = (cell *)((cell)dst + size);
49 void *fill_function_descriptor(void *ptr, void *code);
50 void *function_descriptor_field(void *ptr, size_t idx);
52 vm_char *safe_strdup(const vm_char *str);
54 VM_C_API void *factor_memcpy(void *dst, void *src, size_t len);
58 #if defined(FACTOR_64)
60 #define FACTOR_ATOMIC_CAS(ptr, old_val, new_val) \
61 (InterlockedCompareExchange64( \
62 reinterpret_cast<volatile LONG64 *>(ptr), new_val, old_val) == old_val)
64 #define FACTOR_ATOMIC_ADD(ptr, val) \
65 InterlockedAdd64(reinterpret_cast<volatile LONG64 *>(ptr), val)
67 #define FACTOR_ATOMIC_SUB(ptr, val) \
68 InterlockedAdd64(reinterpret_cast<volatile LONG64 *>(ptr), -val)
72 #define FACTOR_ATOMIC_CAS(ptr, old_val, new_val) \
73 (InterlockedCompareExchange( \
74 reinterpret_cast<volatile LONG *>(ptr), new_val, old_val) == old_val)
76 #define FACTOR_ATOMIC_ADD(ptr, val) \
77 InterlockedAdd(reinterpret_cast<volatile LONG *>(ptr), val)
79 #define FACTOR_ATOMIC_SUB(ptr, val) \
80 InterlockedAdd(reinterpret_cast<volatile LONG *>(ptr), -val)
84 #define FACTOR_MEMORY_BARRIER() \
87 #elif defined(__GNUC__) || defined(__clang__)
89 #define FACTOR_ATOMIC_CAS(ptr, old_val, new_val) \
90 __sync_bool_compare_and_swap(ptr, old_val, new_val)
92 #define FACTOR_ATOMIC_ADD(ptr, val) \
93 __sync_add_and_fetch(ptr, val)
95 #define FACTOR_ATOMIC_SUB(ptr, val) \
96 __sync_sub_and_fetch(ptr, val)
98 #define FACTOR_MEMORY_BARRIER() \
102 #error "Unsupported compiler"