Lines Matching refs:atomic

36  * atomic instructions (used for both SSBO and image) use a new instruction
93 * SSBO atomic intrinsics
95 * All of the SSBO atomic memory operations read a value from memory,
103 * 1: The offset into the SSBO buffer of the variable that the atomic
105 * 2: The data parameter to the atomic function (i.e. the value to add
113 struct ir3_instruction *atomic, *ibo, *src0, *src1, *data, *dummy;
147 atomic = ir3_ATOMIC_B_ADD(b, ibo, 0, src0, 0, src1, 0);
150 atomic = ir3_ATOMIC_B_MIN(b, ibo, 0, src0, 0, src1, 0);
154 atomic = ir3_ATOMIC_B_MIN(b, ibo, 0, src0, 0, src1, 0);
157 atomic = ir3_ATOMIC_B_MAX(b, ibo, 0, src0, 0, src1, 0);
161 atomic = ir3_ATOMIC_B_MAX(b, ibo, 0, src0, 0, src1, 0);
164 atomic = ir3_ATOMIC_B_AND(b, ibo, 0, src0, 0, src1, 0);
167 atomic = ir3_ATOMIC_B_OR(b, ibo, 0, src0, 0, src1, 0);
170 atomic = ir3_ATOMIC_B_XOR(b, ibo, 0, src0, 0, src1, 0);
173 atomic = ir3_ATOMIC_B_XCHG(b, ibo, 0, src0, 0, src1, 0);
176 atomic = ir3_ATOMIC_B_CMPXCHG(b, ibo, 0, src0, 0, src1, 0);
182 atomic->cat6.iim_val = 1;
183 atomic->cat6.d = 1;
184 atomic->cat6.type = type;
185 atomic->barrier_class = IR3_BARRIER_BUFFER_W;
186 atomic->barrier_conflict = IR3_BARRIER_BUFFER_R | IR3_BARRIER_BUFFER_W;
187 ir3_handle_bindless_cat6(atomic, intr->src[0]);
190 array_insert(b, b->keeps, atomic);
192 atomic->dsts[0]->wrmask = src1->dsts[0]->wrmask;
193 ir3_reg_tie(atomic->dsts[0], atomic->srcs[2]);
195 ir3_split_dest(b, &split, atomic, 0, 1);
258 struct ir3_instruction *atomic, *ibo, *src0, *src1, *dummy;
291 atomic = ir3_ATOMIC_B_ADD(b, ibo, 0, src0, 0, src1, 0);
297 atomic = ir3_ATOMIC_B_MIN(b, ibo, 0, src0, 0, src1, 0);
303 atomic = ir3_ATOMIC_B_MAX(b, ibo, 0, src0, 0, src1, 0);
307 atomic = ir3_ATOMIC_B_AND(b, ibo, 0, src0, 0, src1, 0);
311 atomic = ir3_ATOMIC_B_OR(b, ibo, 0, src0, 0, src1, 0);
315 atomic = ir3_ATOMIC_B_XOR(b, ibo, 0, src0, 0, src1, 0);
319 atomic = ir3_ATOMIC_B_XCHG(b, ibo, 0, src0, 0, src1, 0);
323 atomic = ir3_ATOMIC_B_CMPXCHG(b, ibo, 0, src0, 0, src1, 0);
329 atomic->cat6.iim_val = 1;
330 atomic->cat6.d = ncoords;
331 atomic->cat6.type = ir3_get_type_for_image_intrinsic(intr);
332 atomic->cat6.typed = true;
333 atomic->barrier_class = IR3_BARRIER_IMAGE_W;
334 atomic->barrier_conflict = IR3_BARRIER_IMAGE_R | IR3_BARRIER_IMAGE_W;
335 ir3_handle_bindless_cat6(atomic, intr->src[0]);
338 array_insert(b, b->keeps, atomic);
340 atomic->dsts[0]->wrmask = src1->dsts[0]->wrmask;
341 ir3_reg_tie(atomic->dsts[0], atomic->srcs[2]);
343 ir3_split_dest(b, &split, atomic, 0, 1);
448 struct ir3_instruction *addr, *atomic, *src1;
464 atomic = ir3_ATOMIC_G_ADD(b, addr, 0, src1, 0);
467 atomic = ir3_ATOMIC_G_MIN(b, addr, 0, src1, 0);
471 atomic = ir3_ATOMIC_G_MIN(b, addr, 0, src1, 0);
474 atomic = ir3_ATOMIC_G_MAX(b, addr, 0, src1, 0);
478 atomic = ir3_ATOMIC_G_MAX(b, addr, 0, src1, 0);
481 atomic = ir3_ATOMIC_G_AND(b, addr, 0, src1, 0);
484 atomic = ir3_ATOMIC_G_OR(b, addr, 0, src1, 0);
487 atomic = ir3_ATOMIC_G_XOR(b, addr, 0, src1, 0);
490 atomic = ir3_ATOMIC_G_XCHG(b, addr, 0, src1, 0);
493 atomic = ir3_ATOMIC_G_CMPXCHG(b, addr, 0, src1, 0);
496 unreachable("Unknown global atomic op");
499 atomic->cat6.iim_val = 1;
500 atomic->cat6.d = 1;
501 atomic->cat6.type = type;
502 atomic->barrier_class = IR3_BARRIER_BUFFER_W;
503 atomic->barrier_conflict = IR3_BARRIER_BUFFER_R | IR3_BARRIER_BUFFER_W;
506 array_insert(b, b->keeps, atomic);
508 return atomic;