Skip to content

Commit 8f24f73

Browse files
authored
sw: Make Snitch runtime compatible with C++ (#232)
1 parent b60f557 commit 8f24f73

File tree

7 files changed

+58
-45
lines changed

7 files changed

+58
-45
lines changed

sw/snRuntime/src/alloc_v2.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,8 @@ inline void *snrt_l1_alloc_compute_core_local(size_t size,
8383
const size_t alignment) {
8484
snrt_l1_allocator_v2()->next =
8585
ALIGN_UP(snrt_l1_allocator_v2()->next, alignment);
86-
void *retval = snrt_l1_next_v2() + size * snrt_cluster_core_idx();
86+
void *retval =
87+
((uint8_t *)snrt_l1_next_v2()) + size * snrt_cluster_core_idx();
8788
snrt_l1_allocator_v2()->next += size * snrt_cluster_compute_core_num();
8889
snrt_l1_alloc_check_bounds();
8990
return retval;

sw/snRuntime/src/dm.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ inline void dm_main(void) {
210210
if (__builtin_sdma_stat(DM_STATUS_BUSY) == 0) {
211211
DM_PRINTF(50, "idle\n");
212212
dm_p->stat_pvalid = 1;
213-
dm_p->stat_q = 0;
213+
dm_p->stat_q = (en_stat_t)0;
214214
}
215215
break;
216216
case STAT_EXIT:
@@ -219,7 +219,7 @@ inline void dm_main(void) {
219219
case STAT_READY:
220220
DM_PRINTF(50, "ready\n");
221221
dm_p->stat_pvalid = 1;
222-
dm_p->stat_q = 0;
222+
dm_p->stat_q = (en_stat_t)0;
223223
break;
224224
}
225225
}

sw/snRuntime/src/dma.h

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -390,7 +390,7 @@ inline void snrt_dma_stop_tracking() {
390390
inline void snrt_dma_memset(void *ptr, uint8_t value, uint32_t len) {
391391
// set first 64bytes to value
392392
// memset(ptr, value, 64);
393-
uint8_t *p = ptr;
393+
uint8_t *p = (uint8_t *)ptr;
394394
uint32_t nbytes = 64;
395395
while (nbytes--) {
396396
*p++ = value;
@@ -414,7 +414,8 @@ inline snrt_dma_txid_t snrt_dma_load_1d_tile(void *dst, void *src,
414414
size_t tile_idx, size_t tile_size,
415415
uint32_t prec) {
416416
size_t tile_nbytes = tile_size * prec;
417-
return snrt_dma_start_1d(dst, src + tile_idx * tile_nbytes, tile_nbytes);
417+
return snrt_dma_start_1d(dst, ((uint8_t *)src) + tile_idx * tile_nbytes,
418+
tile_nbytes);
418419
}
419420

420421
/**
@@ -429,7 +430,8 @@ inline snrt_dma_txid_t snrt_dma_store_1d_tile(void *dst, void *src,
429430
size_t tile_idx, size_t tile_size,
430431
uint32_t prec) {
431432
size_t tile_nbytes = tile_size * prec;
432-
return snrt_dma_start_1d(dst + tile_idx * tile_nbytes, src, tile_nbytes);
433+
return snrt_dma_start_1d(((uint8_t *)dst) + tile_idx * tile_nbytes, src,
434+
tile_nbytes);
433435
}
434436

435437
/**
@@ -456,12 +458,12 @@ inline snrt_dma_txid_t snrt_dma_load_2d_tile(
456458
src_offset += tile_x1_idx * tile_x1_size * full_x0_size;
457459
src_offset *= prec;
458460
// Initiate transfer
459-
return snrt_dma_start_2d(dst, // dst
460-
src + src_offset, // src
461-
tile_x0_size * prec, // size
462-
tile_x0_size * prec, // dst_stride
463-
full_x0_size * prec, // src_stride
464-
tile_x1_size // repeat
461+
return snrt_dma_start_2d(dst, // dst
462+
((uint8_t *)src) + src_offset, // src
463+
tile_x0_size * prec, // size
464+
tile_x0_size * prec, // dst_stride
465+
full_x0_size * prec, // src_stride
466+
tile_x1_size // repeat
465467
);
466468
}
467469

@@ -489,11 +491,11 @@ inline snrt_dma_txid_t snrt_dma_store_2d_tile(
489491
dst_offset += tile_x1_idx * tile_x1_size * full_x0_size;
490492
dst_offset *= prec;
491493
// Initiate transfer
492-
return snrt_dma_start_2d(dst + dst_offset, // dst
493-
src, // src
494-
tile_x0_size * prec, // size
495-
full_x0_size * prec, // dst_stride
496-
tile_x0_size * prec, // src_stride
497-
tile_x1_size // repeat
494+
return snrt_dma_start_2d(((uint8_t *)dst) + dst_offset, // dst
495+
src, // src
496+
tile_x0_size * prec, // size
497+
full_x0_size * prec, // dst_stride
498+
tile_x0_size * prec, // src_stride
499+
tile_x1_size // repeat
498500
);
499501
}

sw/snRuntime/src/omp/eu.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ inline uint32_t eu_get_workers_in_wfi() {
165165
inline void eu_init(void) {
166166
if (snrt_cluster_core_idx() == 0) {
167167
// Allocate the eu struct in L1 for fast access
168-
eu_p = snrt_l1_alloc(sizeof(eu_t));
168+
eu_p = (eu_t *)snrt_l1_alloc(sizeof(eu_t));
169169
snrt_memset((void *)eu_p, 0, sizeof(eu_t));
170170
// store copy of eu_p on shared memory
171171
eu_p_global = eu_p;

sw/snRuntime/src/printf.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,14 @@
77
// Use snrt_putchar for printf
88
#define _putchar snrt_putchar
99

10+
#ifdef __cplusplus
11+
extern "C" {
12+
#endif
13+
1014
extern void snrt_putchar(char character);
1115

16+
#ifdef __cplusplus
17+
} // extern "C"
18+
#endif
19+
1220
#include "../../deps/printf/printf.h"

sw/snRuntime/src/ssr.h

Lines changed: 26 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ enum snrt_ssr_dim {
6767
/**
6868
* @brief The SSR configuration registers.
6969
*/
70-
enum snrt_ssr_reg {
70+
typedef enum snrt_ssr_reg {
7171
SNRT_SSR_REG_STATUS = 0, /**< SSR status register */
7272
SNRT_SSR_REG_REPEAT = 1, /**< SSR repeat register */
7373
SNRT_SSR_REG_BOUNDS = 2, /**< SSR bounds register */
@@ -77,7 +77,7 @@ enum snrt_ssr_reg {
7777
SNRT_SSR_REG_RPTR_INDIR = 16, /**< SSSR indir. indices read ptr register */
7878
SNRT_SSR_REG_RPTR = 24, /**< SSR read pointer register */
7979
SNRT_SSR_REG_WPTR = 28 /**< SSR write pointer register */
80-
};
80+
} snrt_ssr_reg_t;
8181

8282
/**
8383
* @brief The size of the SSSR indirection indices.
@@ -160,9 +160,9 @@ inline void write_ssr_cfg(enum snrt_ssr_reg reg, uint32_t dm, uint32_t value) {
160160
*/
161161
inline void snrt_ssr_loop_1d(enum snrt_ssr_dm dm, size_t b0, size_t s0) {
162162
--b0;
163-
write_ssr_cfg(SNRT_SSR_REG_BOUNDS + 0, dm, b0);
163+
write_ssr_cfg((snrt_ssr_reg_t)(SNRT_SSR_REG_BOUNDS + 0), dm, b0);
164164
size_t a = 0;
165-
write_ssr_cfg(SNRT_SSR_REG_STRIDES + 0, dm, s0 - a);
165+
write_ssr_cfg((snrt_ssr_reg_t)(SNRT_SSR_REG_STRIDES + 0), dm, s0 - a);
166166
a += s0 * b0;
167167
}
168168

@@ -178,12 +178,12 @@ inline void snrt_ssr_loop_2d(enum snrt_ssr_dm dm, size_t b0, size_t b1,
178178
size_t s0, size_t s1) {
179179
--b0;
180180
--b1;
181-
write_ssr_cfg(SNRT_SSR_REG_BOUNDS + 0, dm, b0);
182-
write_ssr_cfg(SNRT_SSR_REG_BOUNDS + 1, dm, b1);
181+
write_ssr_cfg((snrt_ssr_reg_t)(SNRT_SSR_REG_BOUNDS + 0), dm, b0);
182+
write_ssr_cfg((snrt_ssr_reg_t)(SNRT_SSR_REG_BOUNDS + 1), dm, b1);
183183
size_t a = 0;
184-
write_ssr_cfg(SNRT_SSR_REG_STRIDES + 0, dm, s0 - a);
184+
write_ssr_cfg((snrt_ssr_reg_t)(SNRT_SSR_REG_STRIDES + 0), dm, s0 - a);
185185
a += s0 * b0;
186-
write_ssr_cfg(SNRT_SSR_REG_STRIDES + 1, dm, s1 - a);
186+
write_ssr_cfg((snrt_ssr_reg_t)(SNRT_SSR_REG_STRIDES + 1), dm, s1 - a);
187187
a += s1 * b1;
188188
}
189189

@@ -202,15 +202,15 @@ inline void snrt_ssr_loop_3d(enum snrt_ssr_dm dm, size_t b0, size_t b1,
202202
--b0;
203203
--b1;
204204
--b2;
205-
write_ssr_cfg(SNRT_SSR_REG_BOUNDS + 0, dm, b0);
206-
write_ssr_cfg(SNRT_SSR_REG_BOUNDS + 1, dm, b1);
207-
write_ssr_cfg(SNRT_SSR_REG_BOUNDS + 2, dm, b2);
205+
write_ssr_cfg((snrt_ssr_reg_t)(SNRT_SSR_REG_BOUNDS + 0), dm, b0);
206+
write_ssr_cfg((snrt_ssr_reg_t)(SNRT_SSR_REG_BOUNDS + 1), dm, b1);
207+
write_ssr_cfg((snrt_ssr_reg_t)(SNRT_SSR_REG_BOUNDS + 2), dm, b2);
208208
size_t a = 0;
209-
write_ssr_cfg(SNRT_SSR_REG_STRIDES + 0, dm, s0 - a);
209+
write_ssr_cfg((snrt_ssr_reg_t)(SNRT_SSR_REG_STRIDES + 0), dm, s0 - a);
210210
a += s0 * b0;
211-
write_ssr_cfg(SNRT_SSR_REG_STRIDES + 1, dm, s1 - a);
211+
write_ssr_cfg((snrt_ssr_reg_t)(SNRT_SSR_REG_STRIDES + 1), dm, s1 - a);
212212
a += s1 * b1;
213-
write_ssr_cfg(SNRT_SSR_REG_STRIDES + 2, dm, s2 - a);
213+
write_ssr_cfg((snrt_ssr_reg_t)(SNRT_SSR_REG_STRIDES + 2), dm, s2 - a);
214214
a += s2 * b2;
215215
}
216216

@@ -233,18 +233,18 @@ inline void snrt_ssr_loop_4d(enum snrt_ssr_dm dm, size_t b0, size_t b1,
233233
--b1;
234234
--b2;
235235
--b3;
236-
write_ssr_cfg(SNRT_SSR_REG_BOUNDS + 0, dm, b0);
237-
write_ssr_cfg(SNRT_SSR_REG_BOUNDS + 1, dm, b1);
238-
write_ssr_cfg(SNRT_SSR_REG_BOUNDS + 2, dm, b2);
239-
write_ssr_cfg(SNRT_SSR_REG_BOUNDS + 3, dm, b3);
236+
write_ssr_cfg((snrt_ssr_reg_t)(SNRT_SSR_REG_BOUNDS + 0), dm, b0);
237+
write_ssr_cfg((snrt_ssr_reg_t)(SNRT_SSR_REG_BOUNDS + 1), dm, b1);
238+
write_ssr_cfg((snrt_ssr_reg_t)(SNRT_SSR_REG_BOUNDS + 2), dm, b2);
239+
write_ssr_cfg((snrt_ssr_reg_t)(SNRT_SSR_REG_BOUNDS + 3), dm, b3);
240240
size_t a = 0;
241-
write_ssr_cfg(SNRT_SSR_REG_STRIDES + 0, dm, s0 - a);
241+
write_ssr_cfg((snrt_ssr_reg_t)(SNRT_SSR_REG_STRIDES + 0), dm, s0 - a);
242242
a += s0 * b0;
243-
write_ssr_cfg(SNRT_SSR_REG_STRIDES + 1, dm, s1 - a);
243+
write_ssr_cfg((snrt_ssr_reg_t)(SNRT_SSR_REG_STRIDES + 1), dm, s1 - a);
244244
a += s1 * b1;
245-
write_ssr_cfg(SNRT_SSR_REG_STRIDES + 2, dm, s2 - a);
245+
write_ssr_cfg((snrt_ssr_reg_t)(SNRT_SSR_REG_STRIDES + 2), dm, s2 - a);
246246
a += s2 * b2;
247-
write_ssr_cfg(SNRT_SSR_REG_STRIDES + 3, dm, s3 - a);
247+
write_ssr_cfg((snrt_ssr_reg_t)(SNRT_SSR_REG_STRIDES + 3), dm, s3 - a);
248248
a += s3 * b3;
249249
}
250250

@@ -265,7 +265,8 @@ inline void snrt_ssr_repeat(enum snrt_ssr_dm dm, size_t count) {
265265
*/
266266
inline void snrt_ssr_read(enum snrt_ssr_dm dm, enum snrt_ssr_dim dim,
267267
volatile void *ptr) {
268-
write_ssr_cfg(SNRT_SSR_REG_RPTR + dim, dm, (uintptr_t)ptr);
268+
write_ssr_cfg((snrt_ssr_reg_t)(SNRT_SSR_REG_RPTR + dim), dm,
269+
(uintptr_t)ptr);
269270
}
270271

271272
/**
@@ -276,7 +277,8 @@ inline void snrt_ssr_read(enum snrt_ssr_dm dm, enum snrt_ssr_dim dim,
276277
*/
277278
inline void snrt_ssr_write(enum snrt_ssr_dm dm, enum snrt_ssr_dim dim,
278279
volatile void *ptr) {
279-
write_ssr_cfg(SNRT_SSR_REG_WPTR + dim, dm, (uintptr_t)ptr);
280+
write_ssr_cfg((snrt_ssr_reg_t)(SNRT_SSR_REG_WPTR + dim), dm,
281+
(uintptr_t)ptr);
280282
}
281283

282284
/**

sw/snRuntime/src/sync.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -220,8 +220,8 @@ inline void snrt_global_reduction_dma(double *dst_buffer, double *src_buffer,
220220
// buffer to the respective receiver's destination buffer
221221
if (is_active && is_sender) {
222222
if (!snrt_is_compute_core()) {
223-
void *dst =
224-
(void *)dst_buffer - (1 << level) * SNRT_CLUSTER_OFFSET;
223+
void *dst = (uint8_t *)dst_buffer -
224+
(1 << level) * SNRT_CLUSTER_OFFSET;
225225
snrt_dma_start_1d(dst, src_buffer, len * sizeof(double));
226226
snrt_dma_wait_all();
227227
}

0 commit comments

Comments
 (0)