Lines Matching refs:off
103 pg_addiu(u32 **buf, unsigned int reg1, unsigned int reg2, unsigned int off)
108 if (off > 0x7fff) {
109 uasm_i_lui(buf, T9, uasm_rel_hi(off));
110 uasm_i_addiu(buf, T9, T9, uasm_rel_lo(off));
112 uasm_i_addiu(buf, T9, ZERO, off);
115 if (off > 0x7fff) {
116 uasm_i_lui(buf, T9, uasm_rel_hi(off));
117 uasm_i_addiu(buf, T9, T9, uasm_rel_lo(off));
120 UASM_i_ADDIU(buf, reg1, reg2, off);
233 static void build_clear_store(u32 **buf, int off)
236 uasm_i_sd(buf, ZERO, off, A0);
238 uasm_i_sw(buf, ZERO, off, A0);
242 static inline void build_clear_pref(u32 **buf, int off)
244 if (off & cache_line_mask())
248 _uasm_i_pref(buf, pref_dst_mode, pref_bias_clear_store + off,
252 uasm_i_cache(buf, Create_Dirty_Excl_SD, off, A0);
266 uasm_i_cache(buf, Create_Dirty_Excl_D, off, A0);
278 int off;
302 off = PAGE_SIZE - pref_bias_clear_store;
303 if (off > 0xffff || !pref_bias_clear_store)
304 pg_addiu(&buf, A2, A0, off);
306 uasm_i_ori(&buf, A2, A0, off);
311 off = cache_line_size ? min(8, pref_bias_clear_store / cache_line_size)
313 while (off) {
314 build_clear_pref(&buf, -off);
315 off -= cache_line_size;
319 build_clear_pref(&buf, off);
320 build_clear_store(&buf, off);
321 off += clear_word_size;
322 } while (off < half_clear_loop_size);
323 pg_addiu(&buf, A0, A0, 2 * off);
324 off = -off;
326 build_clear_pref(&buf, off);
327 if (off == -clear_word_size)
329 build_clear_store(&buf, off);
330 off += clear_word_size;
331 } while (off < 0);
336 off = 0;
338 build_clear_store(&buf, off);
339 off += clear_word_size;
340 } while (off < half_clear_loop_size);
341 pg_addiu(&buf, A0, A0, 2 * off);
342 off = -off;
344 if (off == -clear_word_size)
347 build_clear_store(&buf, off);
348 off += clear_word_size;
349 } while (off < 0);
369 static void build_copy_load(u32 **buf, int reg, int off)
372 uasm_i_ld(buf, reg, off, A1);
374 uasm_i_lw(buf, reg, off, A1);
378 static void build_copy_store(u32 **buf, int reg, int off)
381 uasm_i_sd(buf, reg, off, A0);
383 uasm_i_sw(buf, reg, off, A0);
387 static inline void build_copy_load_pref(u32 **buf, int off)
389 if (off & cache_line_mask())
393 _uasm_i_pref(buf, pref_src_mode, pref_bias_copy_load + off, A1);
396 static inline void build_copy_store_pref(u32 **buf, int off)
398 if (off & cache_line_mask())
402 _uasm_i_pref(buf, pref_dst_mode, pref_bias_copy_store + off,
406 uasm_i_cache(buf, Create_Dirty_Excl_SD, off, A0);
420 uasm_i_cache(buf, Create_Dirty_Excl_D, off, A0);
427 int off;
455 off = PAGE_SIZE - pref_bias_copy_load;
456 if (off > 0xffff || !pref_bias_copy_load)
457 pg_addiu(&buf, A2, A0, off);
459 uasm_i_ori(&buf, A2, A0, off);
464 off = cache_line_size ? min(8, pref_bias_copy_load / cache_line_size) *
466 while (off) {
467 build_copy_load_pref(&buf, -off);
468 off -= cache_line_size;
470 off = cache_line_size ? min(8, pref_bias_copy_store / cache_line_size) *
472 while (off) {
473 build_copy_store_pref(&buf, -off);
474 off -= cache_line_size;
478 build_copy_load_pref(&buf, off);
479 build_copy_load(&buf, T0, off);
480 build_copy_load_pref(&buf, off + copy_word_size);
481 build_copy_load(&buf, T1, off + copy_word_size);
482 build_copy_load_pref(&buf, off + 2 * copy_word_size);
483 build_copy_load(&buf, T2, off + 2 * copy_word_size);
484 build_copy_load_pref(&buf, off + 3 * copy_word_size);
485 build_copy_load(&buf, T3, off + 3 * copy_word_size);
486 build_copy_store_pref(&buf, off);
487 build_copy_store(&buf, T0, off);
488 build_copy_store_pref(&buf, off + copy_word_size);
489 build_copy_store(&buf, T1, off + copy_word_size);
490 build_copy_store_pref(&buf, off + 2 * copy_word_size);
491 build_copy_store(&buf, T2, off + 2 * copy_word_size);
492 build_copy_store_pref(&buf, off + 3 * copy_word_size);
493 build_copy_store(&buf, T3, off + 3 * copy_word_size);
494 off += 4 * copy_word_size;
495 } while (off < half_copy_loop_size);
496 pg_addiu(&buf, A1, A1, 2 * off);
497 pg_addiu(&buf, A0, A0, 2 * off);
498 off = -off;
500 build_copy_load_pref(&buf, off);
501 build_copy_load(&buf, T0, off);
502 build_copy_load_pref(&buf, off + copy_word_size);
503 build_copy_load(&buf, T1, off + copy_word_size);
504 build_copy_load_pref(&buf, off + 2 * copy_word_size);
505 build_copy_load(&buf, T2, off + 2 * copy_word_size);
506 build_copy_load_pref(&buf, off + 3 * copy_word_size);
507 build_copy_load(&buf, T3, off + 3 * copy_word_size);
508 build_copy_store_pref(&buf, off);
509 build_copy_store(&buf, T0, off);
510 build_copy_store_pref(&buf, off + copy_word_size);
511 build_copy_store(&buf, T1, off + copy_word_size);
512 build_copy_store_pref(&buf, off + 2 * copy_word_size);
513 build_copy_store(&buf, T2, off + 2 * copy_word_size);
514 build_copy_store_pref(&buf, off + 3 * copy_word_size);
515 if (off == -(4 * copy_word_size))
517 build_copy_store(&buf, T3, off + 3 * copy_word_size);
518 off += 4 * copy_word_size;
519 } while (off < 0);
525 off = 0;
527 build_copy_load(&buf, T0, off);
528 build_copy_load(&buf, T1, off + copy_word_size);
529 build_copy_load(&buf, T2, off + 2 * copy_word_size);
530 build_copy_load(&buf, T3, off + 3 * copy_word_size);
531 build_copy_store_pref(&buf, off);
532 build_copy_store(&buf, T0, off);
533 build_copy_store_pref(&buf, off + copy_word_size);
534 build_copy_store(&buf, T1, off + copy_word_size);
535 build_copy_store_pref(&buf, off + 2 * copy_word_size);
536 build_copy_store(&buf, T2, off + 2 * copy_word_size);
537 build_copy_store_pref(&buf, off + 3 * copy_word_size);
538 build_copy_store(&buf, T3, off + 3 * copy_word_size);
539 off += 4 * copy_word_size;
540 } while (off < half_copy_loop_size);
541 pg_addiu(&buf, A1, A1, 2 * off);
542 pg_addiu(&buf, A0, A0, 2 * off);
543 off = -off;
545 build_copy_load(&buf, T0, off);
546 build_copy_load(&buf, T1, off + copy_word_size);
547 build_copy_load(&buf, T2, off + 2 * copy_word_size);
548 build_copy_load(&buf, T3, off + 3 * copy_word_size);
549 build_copy_store_pref(&buf, off);
550 build_copy_store(&buf, T0, off);
551 build_copy_store_pref(&buf, off + copy_word_size);
552 build_copy_store(&buf, T1, off + copy_word_size);
553 build_copy_store_pref(&buf, off + 2 * copy_word_size);
554 build_copy_store(&buf, T2, off + 2 * copy_word_size);
555 build_copy_store_pref(&buf, off + 3 * copy_word_size);
556 if (off == -(4 * copy_word_size))
559 build_copy_store(&buf, T3, off + 3 * copy_word_size);
560 off += 4 * copy_word_size;
561 } while (off < 0);
567 off = 0;
569 build_copy_load(&buf, T0, off);
570 build_copy_load(&buf, T1, off + copy_word_size);
571 build_copy_load(&buf, T2, off + 2 * copy_word_size);
572 build_copy_load(&buf, T3, off + 3 * copy_word_size);
573 build_copy_store(&buf, T0, off);
574 build_copy_store(&buf, T1, off + copy_word_size);
575 build_copy_store(&buf, T2, off + 2 * copy_word_size);
576 build_copy_store(&buf, T3, off + 3 * copy_word_size);
577 off += 4 * copy_word_size;
578 } while (off < half_copy_loop_size);
579 pg_addiu(&buf, A1, A1, 2 * off);
580 pg_addiu(&buf, A0, A0, 2 * off);
581 off = -off;
583 build_copy_load(&buf, T0, off);
584 build_copy_load(&buf, T1, off + copy_word_size);
585 build_copy_load(&buf, T2, off + 2 * copy_word_size);
586 build_copy_load(&buf, T3, off + 3 * copy_word_size);
587 build_copy_store(&buf, T0, off);
588 build_copy_store(&buf, T1, off + copy_word_size);
589 build_copy_store(&buf, T2, off + 2 * copy_word_size);
590 if (off == -(4 * copy_word_size))
593 build_copy_store(&buf, T3, off + 3 * copy_word_size);
594 off += 4 * copy_word_size;
595 } while (off < 0);