libmetal
cpu.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2017, Xilinx Inc. and Contributors. All rights reserved.
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  */
6 
7 /*
8  * @file cpu.h
9  * @brief CPU specific primatives on microblaze platform.
10  */
11 
12 #ifndef __METAL_MICROBLAZE__H__
13 #define __METAL_MICROBLAZE__H__
14 
15 #include <stdint.h>
16 #include <metal/atomic.h>
17 
18 #define metal_cpu_yield()
19 
20 static inline void metal_processor_io_write64(void *ptr, uint64_t value,
21  memory_order order)
22 {
23  void *tmp = &value;
24 
25  atomic_store_explicit((atomic_ulong *)ptr, *((atomic_ulong *)tmp), order);
26  tmp += sizeof(atomic_ulong);
27  ptr += sizeof(atomic_ulong);
28  atomic_store_explicit((atomic_ulong *)ptr, *((atomic_ulong *)tmp), order);
29 }
30 
31 static inline uint64_t metal_processor_io_read64(void *ptr, memory_order order)
32 {
33  uint64_t long_ret;
34  void *tmp = &long_ret;
35 
36  *((atomic_ulong *)tmp) = atomic_load_explicit((atomic_ulong *)ptr, order);
37  tmp += sizeof(atomic_ulong);
38  ptr += sizeof(atomic_ulong);
39  *((atomic_ulong *)tmp) = atomic_load_explicit((atomic_ulong *)ptr, order);
40 
41  return long_ret;
42 }
43 
44 #endif /* __METAL_MICROBLAZE__H__ */
static uint64_t metal_processor_io_read64(void *ptr, memory_order order)
Definition: cpu.h:31
#define atomic_store_explicit(OBJ, VAL, MO)
Definition: atomic.h:57
memory_order
Definition: atomic.h:34
#define atomic_load_explicit(OBJ, MO)
Definition: atomic.h:61
static void metal_processor_io_write64(void *ptr, uint64_t value, memory_order order)
Definition: cpu.h:20
unsigned long atomic_ulong
Definition: atomic.h:27