Lines Matching refs:off
104 pg_addiu(u32 **buf, unsigned int reg1, unsigned int reg2, unsigned int off)
107 if (off > 0x7fff) {
108 uasm_i_lui(buf, T9, uasm_rel_hi(off));
109 uasm_i_addiu(buf, T9, T9, uasm_rel_lo(off));
111 uasm_i_addiu(buf, T9, ZERO, off);
114 if (off > 0x7fff) {
115 uasm_i_lui(buf, T9, uasm_rel_hi(off));
116 uasm_i_addiu(buf, T9, T9, uasm_rel_lo(off));
119 UASM_i_ADDIU(buf, reg1, reg2, off);
232 static void build_clear_store(u32 **buf, int off)
235 uasm_i_sd(buf, ZERO, off, A0);
237 uasm_i_sw(buf, ZERO, off, A0);
241 static inline void build_clear_pref(u32 **buf, int off)
243 if (off & cache_line_mask())
247 _uasm_i_pref(buf, pref_dst_mode, pref_bias_clear_store + off,
251 uasm_i_cache(buf, Create_Dirty_Excl_SD, off, A0);
265 uasm_i_cache(buf, Create_Dirty_Excl_D, off, A0);
277 int off;
301 off = PAGE_SIZE - pref_bias_clear_store;
302 if (off > 0xffff || !pref_bias_clear_store)
303 pg_addiu(&buf, A2, A0, off);
305 uasm_i_ori(&buf, A2, A0, off);
310 off = cache_line_size ? min(8, pref_bias_clear_store / cache_line_size)
312 while (off) {
313 build_clear_pref(&buf, -off);
314 off -= cache_line_size;
318 build_clear_pref(&buf, off);
319 build_clear_store(&buf, off);
320 off += clear_word_size;
321 } while (off < half_clear_loop_size);
322 pg_addiu(&buf, A0, A0, 2 * off);
323 off = -off;
325 build_clear_pref(&buf, off);
326 if (off == -clear_word_size)
328 build_clear_store(&buf, off);
329 off += clear_word_size;
330 } while (off < 0);
335 off = 0;
337 build_clear_store(&buf, off);
338 off += clear_word_size;
339 } while (off < half_clear_loop_size);
340 pg_addiu(&buf, A0, A0, 2 * off);
341 off = -off;
343 if (off == -clear_word_size)
346 build_clear_store(&buf, off);
347 off += clear_word_size;
348 } while (off < 0);
368 static void build_copy_load(u32 **buf, int reg, int off)
371 uasm_i_ld(buf, reg, off, A1);
373 uasm_i_lw(buf, reg, off, A1);
377 static void build_copy_store(u32 **buf, int reg, int off)
380 uasm_i_sd(buf, reg, off, A0);
382 uasm_i_sw(buf, reg, off, A0);
386 static inline void build_copy_load_pref(u32 **buf, int off)
388 if (off & cache_line_mask())
392 _uasm_i_pref(buf, pref_src_mode, pref_bias_copy_load + off, A1);
395 static inline void build_copy_store_pref(u32 **buf, int off)
397 if (off & cache_line_mask())
401 _uasm_i_pref(buf, pref_dst_mode, pref_bias_copy_store + off,
405 uasm_i_cache(buf, Create_Dirty_Excl_SD, off, A0);
419 uasm_i_cache(buf, Create_Dirty_Excl_D, off, A0);
426 int off;
454 off = PAGE_SIZE - pref_bias_copy_load;
455 if (off > 0xffff || !pref_bias_copy_load)
456 pg_addiu(&buf, A2, A0, off);
458 uasm_i_ori(&buf, A2, A0, off);
463 off = cache_line_size ? min(8, pref_bias_copy_load / cache_line_size) *
465 while (off) {
466 build_copy_load_pref(&buf, -off);
467 off -= cache_line_size;
469 off = cache_line_size ? min(8, pref_bias_copy_store / cache_line_size) *
471 while (off) {
472 build_copy_store_pref(&buf, -off);
473 off -= cache_line_size;
477 build_copy_load_pref(&buf, off);
478 build_copy_load(&buf, T0, off);
479 build_copy_load_pref(&buf, off + copy_word_size);
480 build_copy_load(&buf, T1, off + copy_word_size);
481 build_copy_load_pref(&buf, off + 2 * copy_word_size);
482 build_copy_load(&buf, T2, off + 2 * copy_word_size);
483 build_copy_load_pref(&buf, off + 3 * copy_word_size);
484 build_copy_load(&buf, T3, off + 3 * copy_word_size);
485 build_copy_store_pref(&buf, off);
486 build_copy_store(&buf, T0, off);
487 build_copy_store_pref(&buf, off + copy_word_size);
488 build_copy_store(&buf, T1, off + copy_word_size);
489 build_copy_store_pref(&buf, off + 2 * copy_word_size);
490 build_copy_store(&buf, T2, off + 2 * copy_word_size);
491 build_copy_store_pref(&buf, off + 3 * copy_word_size);
492 build_copy_store(&buf, T3, off + 3 * copy_word_size);
493 off += 4 * copy_word_size;
494 } while (off < half_copy_loop_size);
495 pg_addiu(&buf, A1, A1, 2 * off);
496 pg_addiu(&buf, A0, A0, 2 * off);
497 off = -off;
499 build_copy_load_pref(&buf, off);
500 build_copy_load(&buf, T0, off);
501 build_copy_load_pref(&buf, off + copy_word_size);
502 build_copy_load(&buf, T1, off + copy_word_size);
503 build_copy_load_pref(&buf, off + 2 * copy_word_size);
504 build_copy_load(&buf, T2, off + 2 * copy_word_size);
505 build_copy_load_pref(&buf, off + 3 * copy_word_size);
506 build_copy_load(&buf, T3, off + 3 * copy_word_size);
507 build_copy_store_pref(&buf, off);
508 build_copy_store(&buf, T0, off);
509 build_copy_store_pref(&buf, off + copy_word_size);
510 build_copy_store(&buf, T1, off + copy_word_size);
511 build_copy_store_pref(&buf, off + 2 * copy_word_size);
512 build_copy_store(&buf, T2, off + 2 * copy_word_size);
513 build_copy_store_pref(&buf, off + 3 * copy_word_size);
514 if (off == -(4 * copy_word_size))
516 build_copy_store(&buf, T3, off + 3 * copy_word_size);
517 off += 4 * copy_word_size;
518 } while (off < 0);
524 off = 0;
526 build_copy_load(&buf, T0, off);
527 build_copy_load(&buf, T1, off + copy_word_size);
528 build_copy_load(&buf, T2, off + 2 * copy_word_size);
529 build_copy_load(&buf, T3, off + 3 * copy_word_size);
530 build_copy_store_pref(&buf, off);
531 build_copy_store(&buf, T0, off);
532 build_copy_store_pref(&buf, off + copy_word_size);
533 build_copy_store(&buf, T1, off + copy_word_size);
534 build_copy_store_pref(&buf, off + 2 * copy_word_size);
535 build_copy_store(&buf, T2, off + 2 * copy_word_size);
536 build_copy_store_pref(&buf, off + 3 * copy_word_size);
537 build_copy_store(&buf, T3, off + 3 * copy_word_size);
538 off += 4 * copy_word_size;
539 } while (off < half_copy_loop_size);
540 pg_addiu(&buf, A1, A1, 2 * off);
541 pg_addiu(&buf, A0, A0, 2 * off);
542 off = -off;
544 build_copy_load(&buf, T0, off);
545 build_copy_load(&buf, T1, off + copy_word_size);
546 build_copy_load(&buf, T2, off + 2 * copy_word_size);
547 build_copy_load(&buf, T3, off + 3 * copy_word_size);
548 build_copy_store_pref(&buf, off);
549 build_copy_store(&buf, T0, off);
550 build_copy_store_pref(&buf, off + copy_word_size);
551 build_copy_store(&buf, T1, off + copy_word_size);
552 build_copy_store_pref(&buf, off + 2 * copy_word_size);
553 build_copy_store(&buf, T2, off + 2 * copy_word_size);
554 build_copy_store_pref(&buf, off + 3 * copy_word_size);
555 if (off == -(4 * copy_word_size))
558 build_copy_store(&buf, T3, off + 3 * copy_word_size);
559 off += 4 * copy_word_size;
560 } while (off < 0);
566 off = 0;
568 build_copy_load(&buf, T0, off);
569 build_copy_load(&buf, T1, off + copy_word_size);
570 build_copy_load(&buf, T2, off + 2 * copy_word_size);
571 build_copy_load(&buf, T3, off + 3 * copy_word_size);
572 build_copy_store(&buf, T0, off);
573 build_copy_store(&buf, T1, off + copy_word_size);
574 build_copy_store(&buf, T2, off + 2 * copy_word_size);
575 build_copy_store(&buf, T3, off + 3 * copy_word_size);
576 off += 4 * copy_word_size;
577 } while (off < half_copy_loop_size);
578 pg_addiu(&buf, A1, A1, 2 * off);
579 pg_addiu(&buf, A0, A0, 2 * off);
580 off = -off;
582 build_copy_load(&buf, T0, off);
583 build_copy_load(&buf, T1, off + copy_word_size);
584 build_copy_load(&buf, T2, off + 2 * copy_word_size);
585 build_copy_load(&buf, T3, off + 3 * copy_word_size);
586 build_copy_store(&buf, T0, off);
587 build_copy_store(&buf, T1, off + copy_word_size);
588 build_copy_store(&buf, T2, off + 2 * copy_word_size);
589 if (off == -(4 * copy_word_size))
592 build_copy_store(&buf, T3, off + 3 * copy_word_size);
593 off += 4 * copy_word_size;
594 } while (off < 0);