Lines Matching defs:atomic
36 * atomic instructions (used for both SSBO and image) use a new instruction
98 * SSBO atomic intrinsics
100 * All of the SSBO atomic memory operations read a value from memory,
108 * 1: The offset into the SSBO buffer of the variable that the atomic
110 * 2: The data parameter to the atomic function (i.e. the value to add
118 struct ir3_instruction *atomic, *ibo, *src0, *src1, *data, *dummy;
158 atomic = ir3_ATOMIC_ADD_G(b, ibo, 0, src0, 0, src1, 0);
161 atomic = ir3_ATOMIC_MIN_G(b, ibo, 0, src0, 0, src1, 0);
165 atomic = ir3_ATOMIC_MIN_G(b, ibo, 0, src0, 0, src1, 0);
168 atomic = ir3_ATOMIC_MAX_G(b, ibo, 0, src0, 0, src1, 0);
172 atomic = ir3_ATOMIC_MAX_G(b, ibo, 0, src0, 0, src1, 0);
175 atomic = ir3_ATOMIC_AND_G(b, ibo, 0, src0, 0, src1, 0);
178 atomic = ir3_ATOMIC_OR_G(b, ibo, 0, src0, 0, src1, 0);
181 atomic = ir3_ATOMIC_XOR_G(b, ibo, 0, src0, 0, src1, 0);
184 atomic = ir3_ATOMIC_XCHG_G(b, ibo, 0, src0, 0, src1, 0);
187 atomic = ir3_ATOMIC_CMPXCHG_G(b, ibo, 0, src0, 0, src1, 0);
193 atomic->cat6.iim_val = 1;
194 atomic->cat6.d = 1;
195 atomic->cat6.type = type;
196 atomic->barrier_class = IR3_BARRIER_BUFFER_W;
197 atomic->barrier_conflict = IR3_BARRIER_BUFFER_R | IR3_BARRIER_BUFFER_W;
200 array_insert(b, b->keeps, atomic);
202 return atomic;
240 struct ir3_instruction *atomic, *ibo, *src0, *src1, *dummy;
277 atomic = ir3_ATOMIC_ADD_G(b, ibo, 0, src0, 0, src1, 0);
280 atomic = ir3_ATOMIC_MIN_G(b, ibo, 0, src0, 0, src1, 0);
283 atomic = ir3_ATOMIC_MAX_G(b, ibo, 0, src0, 0, src1, 0);
286 atomic = ir3_ATOMIC_AND_G(b, ibo, 0, src0, 0, src1, 0);
289 atomic = ir3_ATOMIC_OR_G(b, ibo, 0, src0, 0, src1, 0);
292 atomic = ir3_ATOMIC_XOR_G(b, ibo, 0, src0, 0, src1, 0);
295 atomic = ir3_ATOMIC_XCHG_G(b, ibo, 0, src0, 0, src1, 0);
298 atomic = ir3_ATOMIC_CMPXCHG_G(b, ibo, 0, src0, 0, src1, 0);
304 atomic->cat6.iim_val = 1;
305 atomic->cat6.d = ncoords;
306 atomic->cat6.type = ir3_get_image_type(var);
307 atomic->cat6.typed = true;
308 atomic->barrier_class = IR3_BARRIER_IMAGE_W;
309 atomic->barrier_conflict = IR3_BARRIER_IMAGE_R | IR3_BARRIER_IMAGE_W;
312 array_insert(b, b->keeps, atomic);
314 return atomic;
334 * want to know if anything consumes the result of the atomic instr,
339 get_atomic_dest_mov(struct ir3_instruction *atomic)
342 if (atomic->data)
343 return atomic->data;
346 struct ir3_instruction *src = ssa(atomic->regs[3]);
350 struct ir3_instruction *mov = ir3_MOV(atomic->block, dummy, TYPE_U32);
354 if (atomic->regs[0]->flags & IR3_REG_ARRAY) {
356 mov->regs[0]->array = atomic->regs[0]->array;
363 list_add(&mov->node, &atomic->node);
372 struct ir3_instruction *nop = ir3_NOP(atomic->block);
378 return atomic->data = mov;