44 :
"+r"(tmp)::
"memory");
96#ifdef __TOOLCHAIN_LLVM__
97 __builtin_ssr_enable();
99 asm volatile(
"csrsi 0x7C0, 1\n");
107#ifdef __TOOLCHAIN_LLVM__
108 __builtin_ssr_disable();
110 asm volatile(
"csrci 0x7C0, 1\n");
120 asm volatile(
"csrs 0x7C3, %[mask]\n" : : [ mask ]
"r"(mask) :);
127 asm volatile(
"csrc 0x7C3, %[mask]\n" : : [ mask ]
"r"(mask) :);
139 asm volatile(
"scfgri %[value], %[dm] | %[reg]<<5\n"
140 : [ value ]
"=r"(value)
141 : [ dm ]
"i"(dm), [ reg ]
"i"(reg));
158 asm volatile(
"scfgwi %[value], %[dm] | %[reg]<<5\n" ::[value]
"r"(value),
159 [ dm ]
"i"(dm), [ reg ]
"i"(reg));
186 size_t b1,
size_t s0,
size_t s1) {
209 size_t b1,
size_t b2,
size_t s0,
size_t s1,
239 size_t b1,
size_t b2,
size_t b3,
size_t s0,
240 size_t s1,
size_t s2,
size_t s3) {
289 volatile void *ptr) {
307static inline void snrt_issr_set_bound(
const snrt_ssr_dm_t dm,
size_t bound) {
313 volatile void *idcs) {
318static inline void snrt_issr_read(
const snrt_ssr_dm_t dm,
volatile void *base,
319 volatile void *idcs,
size_t bound,
322 snrt_issr_set_bound(dm, bound);
323 snrt_issr_set_ptrs(dm, base, idcs);
void snrt_sc_disable(uint32_t mask)
Disable scalar chaining.
Definition ssr.h:126
static void snrt_ssr_read(const snrt_ssr_dm_t dm, const snrt_ssr_dim_t dim, volatile void *ptr)
Start a streaming read.
Definition ssr.h:275
static void snrt_ssr_loop_2d(const snrt_ssr_dm_t dm, size_t b0, size_t b1, size_t s0, size_t s1)
Configure an SSR data mover for a 2D loop nest.
Definition ssr.h:185
static void snrt_ssr_write(const snrt_ssr_dm_t dm, const snrt_ssr_dim_t dim, volatile void *ptr)
Start a streaming write.
Definition ssr.h:287
snrt_ssr_dm_t
The different SSRs.
Definition ssr.h:50
@ SNRT_SSR_DM0
Definition ssr.h:51
@ SNRT_SSR_DM_ALL
Definition ssr.h:54
@ SNRT_SSR_DM1
Definition ssr.h:52
@ SNRT_SSR_DM2
Definition ssr.h:53
snrt_ssr_idxsize_t
The size of the SSSR indirection indices.
Definition ssr.h:85
@ SNRT_SSR_IDXSIZE_U8
Definition ssr.h:86
@ SNRT_SSR_IDXSIZE_U16
Definition ssr.h:87
@ SNRT_SSR_IDXSIZE_U32
Definition ssr.h:88
@ SNRT_SSR_IDXSIZE_U64
Definition ssr.h:89
static void snrt_issr_set_idx_cfg(const snrt_ssr_dm_t dm, snrt_ssr_idxsize_t idxsize)
Start a streaming indirect read.
Definition ssr.h:302
static void snrt_ssr_loop_4d(const snrt_ssr_dm_t dm, size_t b0, size_t b1, size_t b2, size_t b3, size_t s0, size_t s1, size_t s2, size_t s3)
Configure an SSR data mover for a 4D loop nest.
Definition ssr.h:238
static void snrt_ssr_repeat(const snrt_ssr_dm_t dm, size_t count)
Configure the repetition count for a stream.
Definition ssr.h:265
void snrt_ssr_enable()
Enable all SSRs.
Definition ssr.h:95
static void snrt_ssr_loop_1d(const snrt_ssr_dm_t dm, size_t b0, size_t s0)
Configure an SSR data mover for a 1D loop nest.
Definition ssr.h:168
static void snrt_ssr_loop_3d(const snrt_ssr_dm_t dm, size_t b0, size_t b1, size_t b2, size_t s0, size_t s1, size_t s2)
Configure an SSR data mover for a 3D loop nest.
Definition ssr.h:208
void snrt_ssr_disable()
Disable all SSRs.
Definition ssr.h:106
void snrt_sc_enable(uint32_t mask)
Enable scalar chaining.
Definition ssr.h:119
void snrt_fpu_fence()
Synchronize the integer and float pipelines.
Definition ssr.h:39
snrt_ssr_reg_t
The SSR configuration registers.
Definition ssr.h:70
@ SNRT_SSR_REG_IDX_CFG
Definition ssr.h:75
@ SNRT_SSR_REG_RPTR
Definition ssr.h:78
@ SNRT_SSR_REG_WPTR
Definition ssr.h:79
@ SNRT_SSR_REG_BOUNDS
Definition ssr.h:73
@ SNRT_SSR_REG_RPTR_INDIR
Definition ssr.h:77
@ SNRT_SSR_REG_REPEAT
Definition ssr.h:72
@ SNRT_SSR_REG_STATUS
Definition ssr.h:71
@ SNRT_SSR_REG_STRIDES
Definition ssr.h:74
@ SNRT_SSR_REG_IDX_BASE
Definition ssr.h:76
snrt_ssr_dim_t
The different dimensions.
Definition ssr.h:60
@ SNRT_SSR_2D
Definition ssr.h:62
@ SNRT_SSR_1D
Definition ssr.h:61
@ SNRT_SSR_3D
Definition ssr.h:63
@ SNRT_SSR_4D
Definition ssr.h:64
static uint32_t read_ssr_cfg(const snrt_ssr_reg_t reg, const snrt_ssr_dm_t dm)
Read the value of an SSR configuration register.
Definition ssr.h:136
static void write_ssr_cfg(const snrt_ssr_reg_t reg, const snrt_ssr_dm_t dm, uint32_t value)
Write a value to an SSR configuration register.
Definition ssr.h:156