Lines Matching refs:c

171 static void wake_blocked_threads(ITCStorageCell *c)  in wake_blocked_threads()  argument
175 if (cs->halted && (c->blocked_threads & (1ULL << cs->cpu_index))) { in wake_blocked_threads()
179 c->blocked_threads = 0; in wake_blocked_threads()
183 void block_thread_and_exit(ITCStorageCell *c) in block_thread_and_exit() argument
185 c->blocked_threads |= 1ULL << current_cpu->cpu_index; in block_thread_and_exit()
193 static inline uint64_t view_bypass_read(ITCStorageCell *c) in view_bypass_read() argument
195 if (c->tag.FIFO) { in view_bypass_read()
196 return c->data[c->fifo_out]; in view_bypass_read()
198 return c->data[0]; in view_bypass_read()
202 static inline void view_bypass_write(ITCStorageCell *c, uint64_t val) in view_bypass_write() argument
204 if (c->tag.FIFO && (c->tag.FIFOPtr > 0)) { in view_bypass_write()
205 int idx = (c->fifo_out + c->tag.FIFOPtr - 1) % ITC_CELL_DEPTH; in view_bypass_write()
206 c->data[idx] = val; in view_bypass_write()
214 static inline uint64_t view_control_read(ITCStorageCell *c) in view_control_read() argument
216 return ((uint64_t)c->tag.FIFODepth << ITC_CELL_TAG_FIFO_DEPTH) | in view_control_read()
217 (c->tag.FIFOPtr << ITC_CELL_TAG_FIFO_PTR) | in view_control_read()
218 (c->tag.FIFO << ITC_CELL_TAG_FIFO) | in view_control_read()
219 (c->tag.T << ITC_CELL_TAG_T) | in view_control_read()
220 (c->tag.E << ITC_CELL_TAG_E) | in view_control_read()
221 (c->tag.F << ITC_CELL_TAG_F); in view_control_read()
224 static inline void view_control_write(ITCStorageCell *c, uint64_t val) in view_control_write() argument
226 c->tag.T = (val >> ITC_CELL_TAG_T) & 1; in view_control_write()
227 c->tag.E = (val >> ITC_CELL_TAG_E) & 1; in view_control_write()
228 c->tag.F = (val >> ITC_CELL_TAG_F) & 1; in view_control_write()
230 if (c->tag.E) { in view_control_write()
231 c->tag.FIFOPtr = 0; in view_control_write()
237 static uint64_t view_ef_common_read(ITCStorageCell *c, bool blocking) in view_ef_common_read() argument
241 if (!c->tag.FIFO) { in view_ef_common_read()
245 c->tag.F = 0; in view_ef_common_read()
247 if (blocking && c->tag.E) { in view_ef_common_read()
248 block_thread_and_exit(c); in view_ef_common_read()
251 if (c->blocked_threads) { in view_ef_common_read()
252 wake_blocked_threads(c); in view_ef_common_read()
255 if (c->tag.FIFOPtr > 0) { in view_ef_common_read()
256 ret = c->data[c->fifo_out]; in view_ef_common_read()
257 c->fifo_out = (c->fifo_out + 1) % ITC_CELL_DEPTH; in view_ef_common_read()
258 c->tag.FIFOPtr--; in view_ef_common_read()
261 if (c->tag.FIFOPtr == 0) { in view_ef_common_read()
262 c->tag.E = 1; in view_ef_common_read()
268 static uint64_t view_ef_sync_read(ITCStorageCell *c) in view_ef_sync_read() argument
270 return view_ef_common_read(c, true); in view_ef_sync_read()
273 static uint64_t view_ef_try_read(ITCStorageCell *c) in view_ef_try_read() argument
275 return view_ef_common_read(c, false); in view_ef_try_read()
278 static inline void view_ef_common_write(ITCStorageCell *c, uint64_t val, in view_ef_common_write() argument
281 if (!c->tag.FIFO) { in view_ef_common_write()
285 c->tag.E = 0; in view_ef_common_write()
287 if (blocking && c->tag.F) { in view_ef_common_write()
288 block_thread_and_exit(c); in view_ef_common_write()
291 if (c->blocked_threads) { in view_ef_common_write()
292 wake_blocked_threads(c); in view_ef_common_write()
295 if (c->tag.FIFOPtr < ITC_CELL_DEPTH) { in view_ef_common_write()
296 int idx = (c->fifo_out + c->tag.FIFOPtr) % ITC_CELL_DEPTH; in view_ef_common_write()
297 c->data[idx] = val; in view_ef_common_write()
298 c->tag.FIFOPtr++; in view_ef_common_write()
301 if (c->tag.FIFOPtr == ITC_CELL_DEPTH) { in view_ef_common_write()
302 c->tag.F = 1; in view_ef_common_write()
306 static void view_ef_sync_write(ITCStorageCell *c, uint64_t val) in view_ef_sync_write() argument
308 view_ef_common_write(c, val, true); in view_ef_sync_write()
311 static void view_ef_try_write(ITCStorageCell *c, uint64_t val) in view_ef_try_write() argument
313 view_ef_common_write(c, val, false); in view_ef_try_write()
318 static uint64_t view_pv_common_read(ITCStorageCell *c, bool blocking) in view_pv_common_read() argument
320 uint64_t ret = c->data[0]; in view_pv_common_read()
322 if (c->tag.FIFO) { in view_pv_common_read()
326 if (c->data[0] > 0) { in view_pv_common_read()
327 c->data[0]--; in view_pv_common_read()
329 block_thread_and_exit(c); in view_pv_common_read()
335 static uint64_t view_pv_sync_read(ITCStorageCell *c) in view_pv_sync_read() argument
337 return view_pv_common_read(c, true); in view_pv_sync_read()
340 static uint64_t view_pv_try_read(ITCStorageCell *c) in view_pv_try_read() argument
342 return view_pv_common_read(c, false); in view_pv_try_read()
345 static inline void view_pv_common_write(ITCStorageCell *c) in view_pv_common_write() argument
347 if (c->tag.FIFO) { in view_pv_common_write()
351 if (c->data[0] < ITC_CELL_PV_MAX_VAL) { in view_pv_common_write()
352 c->data[0]++; in view_pv_common_write()
355 if (c->blocked_threads) { in view_pv_common_write()
356 wake_blocked_threads(c); in view_pv_common_write()
360 static void view_pv_sync_write(ITCStorageCell *c) in view_pv_sync_write() argument
362 view_pv_common_write(c); in view_pv_sync_write()
365 static void view_pv_try_write(ITCStorageCell *c) in view_pv_try_write() argument
367 view_pv_common_write(c); in view_pv_try_write()