Lines Matching +full:3 +full:- +full:n
1 // SPDX-License-Identifier: GPL-2.0
33 /* Work-around for some SRMs which mishandle opDEC faults. */
42 " br $16, 1f\n" in opDEC_check()
45 " ldq $16, 8($sp)\n" in opDEC_check()
46 " addq $16, 4, $16\n" in opDEC_check()
47 " stq $16, 8($sp)\n" in opDEC_check()
48 " call_pal %[rti]\n" in opDEC_check()
50 "1: lda $17, 3\n" in opDEC_check()
51 " call_pal %[wrent]\n" in opDEC_check()
52 /* With that in place, the fault from the round-to-minf fp in opDEC_check()
55 " lda %[fix], 0\n" in opDEC_check()
56 " cvttq/svm $f31,$f31\n" in opDEC_check()
59 : [rti] "n" (PAL_rti), [wrent] "n" (PAL_wrent) in opDEC_check()
63 printk("opDEC fixup enabled.\n"); in opDEC_check()
69 printk("pc = [<%016lx>] ra = [<%016lx>] ps = %04lx %s\n", in dik_show_regs()
70 regs->pc, regs->r26, regs->ps, print_tainted()); in dik_show_regs()
71 printk("pc is at %pSR\n", (void *)regs->pc); in dik_show_regs()
72 printk("ra is at %pSR\n", (void *)regs->r26); in dik_show_regs()
73 printk("v0 = %016lx t0 = %016lx t1 = %016lx\n", in dik_show_regs()
74 regs->r0, regs->r1, regs->r2); in dik_show_regs()
75 printk("t2 = %016lx t3 = %016lx t4 = %016lx\n", in dik_show_regs()
76 regs->r3, regs->r4, regs->r5); in dik_show_regs()
77 printk("t5 = %016lx t6 = %016lx t7 = %016lx\n", in dik_show_regs()
78 regs->r6, regs->r7, regs->r8); in dik_show_regs()
81 printk("s0 = %016lx s1 = %016lx s2 = %016lx\n", in dik_show_regs()
83 printk("s3 = %016lx s4 = %016lx s5 = %016lx\n", in dik_show_regs()
85 printk("s6 = %016lx\n", r9_15[15]); in dik_show_regs()
88 printk("a0 = %016lx a1 = %016lx a2 = %016lx\n", in dik_show_regs()
89 regs->r16, regs->r17, regs->r18); in dik_show_regs()
90 printk("a3 = %016lx a4 = %016lx a5 = %016lx\n", in dik_show_regs()
91 regs->r19, regs->r20, regs->r21); in dik_show_regs()
92 printk("t8 = %016lx t9 = %016lx t10= %016lx\n", in dik_show_regs()
93 regs->r22, regs->r23, regs->r24); in dik_show_regs()
94 printk("t11= %016lx pv = %016lx at = %016lx\n", in dik_show_regs()
95 regs->r25, regs->r27, regs->r28); in dik_show_regs()
96 printk("gp = %016lx sp = %p\n", regs->gp, regs+1); in dik_show_regs()
115 for (i = -6; i < 2; i++) { in dik_show_code()
121 printk("\n"); in dik_show_code()
128 printk("%sTrace:\n", loglvl); in dik_show_trace()
135 printk("%s[<%lx>] %pSR\n", loglvl, tmp, (void *)tmp); in dik_show_trace()
141 printk("%s\n", loglvl); in dik_show_trace()
160 if (((long) stack & (THREAD_SIZE-1)) == 0) in show_stack()
164 pr_cont("\n"); in show_stack()
171 pr_cont("\n"); in show_stack()
178 if (regs->ps & 8) in die_if_kernel()
183 printk("%s(%d): %s %ld\n", current->comm, task_pid_nr(current), str, err); in die_if_kernel()
187 dik_show_code((unsigned int *)regs->pc); in die_if_kernel()
190 printk("die_if_kernel recursion detected.\n"); in die_if_kernel()
217 /* Software-completion summary bit is set, so try to in do_entArith()
221 si_code = alpha_fp_emul(regs->pc - 4); in do_entArith()
229 send_sig_fault_trapno(SIGFPE, si_code, (void __user *) regs->pc, 0, current); in do_entArith()
237 if (type == 3) { /* FEN fault */ in do_entIF()
247 current_thread_info()->pcb.flags |= 1; in do_entIF()
248 __reload_thread(¤t_thread_info()->pcb); in do_entIF()
254 = (const unsigned int *) regs->pc; in do_entIF()
255 printk("Kernel bug at %s:%d\n", in do_entIF()
265 = (unsigned int *) regs->pc - 1; in do_entIF()
269 regs->r0 = 0; in do_entIF()
281 regs->pc -= 4; /* make pc point to former bpt */ in do_entIF()
284 send_sig_fault(SIGTRAP, TRAP_BRKPT, (void __user *)regs->pc, in do_entIF()
290 (void __user *) regs->pc, 0, current); in do_entIF()
294 switch ((long) regs->r16) { in do_entIF()
351 send_sig_fault_trapno(signo, code, (void __user *) regs->pc, in do_entIF()
352 regs->r16, current); in do_entIF()
360 the opDEC properly - they return the PC of the in do_entIF()
367 regs->pc += opDEC_fix; in do_entIF()
372 si_code = alpha_fp_emul(regs->pc - 4); in do_entIF()
377 (void __user *) regs->pc, in do_entIF()
385 default: /* unexpected instruction-fault type */ in do_entIF()
389 send_sig_fault(SIGILL, ILL_ILLOPC, (void __user *)regs->pc, current); in do_entIF()
404 force_sig_fault(SIGILL, ILL_ILLOPC, (void __user *)regs->pc); in do_entDbg()
411 * fp-regs), and it needs to have them in order for simpler access.
413 * Due to the non-standard register layout (and because we don't want
414 * to handle floating-point regs), user-mode unaligned accesses are
418 * on a gp-register unaligned load/store, something is _very_ wrong
440 unsigned long pc = regs->pc - 4; in do_entUna()
441 unsigned long *_regs = regs->regs; in do_entUna()
455 "1: ldq_u %1,0(%3)\n" in do_entUna()
456 "2: ldq_u %2,1(%3)\n" in do_entUna()
457 " extwl %1,%3,%1\n" in do_entUna()
458 " extwh %2,%3,%2\n" in do_entUna()
459 "3:\n" in do_entUna()
460 EXC(1b,3b,%1,%0) in do_entUna()
461 EXC(2b,3b,%2,%0) in do_entUna()
471 "1: ldq_u %1,0(%3)\n" in do_entUna()
472 "2: ldq_u %2,3(%3)\n" in do_entUna()
473 " extll %1,%3,%1\n" in do_entUna()
474 " extlh %2,%3,%2\n" in do_entUna()
475 "3:\n" in do_entUna()
476 EXC(1b,3b,%1,%0) in do_entUna()
477 EXC(2b,3b,%2,%0) in do_entUna()
487 "1: ldq_u %1,0(%3)\n" in do_entUna()
488 "2: ldq_u %2,7(%3)\n" in do_entUna()
489 " extql %1,%3,%1\n" in do_entUna()
490 " extqh %2,%3,%2\n" in do_entUna()
491 "3:\n" in do_entUna()
492 EXC(1b,3b,%1,%0) in do_entUna()
493 EXC(2b,3b,%2,%0) in do_entUna()
506 "1: ldq_u %2,1(%5)\n" in do_entUna()
507 "2: ldq_u %1,0(%5)\n" in do_entUna()
508 " inswh %6,%5,%4\n" in do_entUna()
509 " inswl %6,%5,%3\n" in do_entUna()
510 " mskwh %2,%5,%2\n" in do_entUna()
511 " mskwl %1,%5,%1\n" in do_entUna()
512 " or %2,%4,%2\n" in do_entUna()
513 " or %1,%3,%1\n" in do_entUna()
514 "3: stq_u %2,1(%5)\n" in do_entUna()
515 "4: stq_u %1,0(%5)\n" in do_entUna()
516 "5:\n" in do_entUna()
519 EXC(3b,5b,$31,%0) in do_entUna()
530 "1: ldq_u %2,3(%5)\n" in do_entUna()
531 "2: ldq_u %1,0(%5)\n" in do_entUna()
532 " inslh %6,%5,%4\n" in do_entUna()
533 " insll %6,%5,%3\n" in do_entUna()
534 " msklh %2,%5,%2\n" in do_entUna()
535 " mskll %1,%5,%1\n" in do_entUna()
536 " or %2,%4,%2\n" in do_entUna()
537 " or %1,%3,%1\n" in do_entUna()
538 "3: stq_u %2,3(%5)\n" in do_entUna()
539 "4: stq_u %1,0(%5)\n" in do_entUna()
540 "5:\n" in do_entUna()
543 EXC(3b,5b,$31,%0) in do_entUna()
554 "1: ldq_u %2,7(%5)\n" in do_entUna()
555 "2: ldq_u %1,0(%5)\n" in do_entUna()
556 " insqh %6,%5,%4\n" in do_entUna()
557 " insql %6,%5,%3\n" in do_entUna()
558 " mskqh %2,%5,%2\n" in do_entUna()
559 " mskql %1,%5,%1\n" in do_entUna()
560 " or %2,%4,%2\n" in do_entUna()
561 " or %1,%3,%1\n" in do_entUna()
562 "3: stq_u %2,7(%5)\n" in do_entUna()
563 "4: stq_u %1,0(%5)\n" in do_entUna()
564 "5:\n" in do_entUna()
567 EXC(3b,5b,$31,%0) in do_entUna()
577 printk("Bad unaligned kernel access at %016lx: %p %lx %lu\n", in do_entUna()
588 printk("Forwarding unaligned exception at %lx (%lx)\n", in do_entUna()
591 regs->pc = newpc; in do_entUna()
600 printk("%s(%d): unhandled unaligned exception\n", in do_entUna()
601 current->comm, task_pid_nr(current)); in do_entUna()
603 printk("pc = [<%016lx>] ra = [<%016lx>] ps = %04lx\n", in do_entUna()
604 pc, una_reg(26), regs->ps); in do_entUna()
605 printk("r0 = %016lx r1 = %016lx r2 = %016lx\n", in do_entUna()
607 printk("r3 = %016lx r4 = %016lx r5 = %016lx\n", in do_entUna()
608 una_reg(3), una_reg(4), una_reg(5)); in do_entUna()
609 printk("r6 = %016lx r7 = %016lx r8 = %016lx\n", in do_entUna()
611 printk("r9 = %016lx r10= %016lx r11= %016lx\n", in do_entUna()
613 printk("r12= %016lx r13= %016lx r14= %016lx\n", in do_entUna()
615 printk("r15= %016lx\n", una_reg(15)); in do_entUna()
616 printk("r16= %016lx r17= %016lx r18= %016lx\n", in do_entUna()
618 printk("r19= %016lx r20= %016lx r21= %016lx\n", in do_entUna()
620 printk("r22= %016lx r23= %016lx r24= %016lx\n", in do_entUna()
622 printk("r25= %016lx r27= %016lx r28= %016lx\n", in do_entUna()
624 printk("gp = %016lx sp = %p\n", regs->gp, regs+1); in do_entUna()
630 printk("die_if_kernel recursion detected.\n"); in do_entUna()
638 * Convert an s-floating point value in memory format to the
640 * needs to be remapped to preserve non-finite values
641 * (infinities, not-a-numbers, denormals).
668 * Convert an s-floating point value in register format to the
678 * Handle user-level unaligned fault. Handling user-level unaligned
687 * particular, load-linked/store-conditionally and floating point
706 #define R(x) ((size_t) &((struct pt_regs *)0)->x)
711 -56, -48, -40, -32, -24, -16, -8,
734 if (!(current_thread_info()->status & TS_UAC_NOPRINT)) { in do_entUnaUser()
736 printk("%s(%d): unaligned trap at %016lx: %p %lx %ld\n", in do_entUnaUser()
737 current->comm, task_pid_nr(current), in do_entUnaUser()
738 regs->pc - 4, va, opcode, reg); in do_entUnaUser()
741 if ((current_thread_info()->status & TS_UAC_SIGBUS)) in do_entUnaUser()
744 if ((current_thread_info()->status & TS_UAC_NOFIX)) in do_entUnaUser()
755 unaligned[1].pc = regs->pc - 4; in do_entUnaUser()
778 "1: ldq_u %1,0(%3)\n" in do_entUnaUser()
779 "2: ldq_u %2,1(%3)\n" in do_entUnaUser()
780 " extwl %1,%3,%1\n" in do_entUnaUser()
781 " extwh %2,%3,%2\n" in do_entUnaUser()
782 "3:\n" in do_entUnaUser()
783 EXC(1b,3b,%1,%0) in do_entUnaUser()
784 EXC(2b,3b,%2,%0) in do_entUnaUser()
794 "1: ldq_u %1,0(%3)\n" in do_entUnaUser()
795 "2: ldq_u %2,3(%3)\n" in do_entUnaUser()
796 " extll %1,%3,%1\n" in do_entUnaUser()
797 " extlh %2,%3,%2\n" in do_entUnaUser()
798 "3:\n" in do_entUnaUser()
799 EXC(1b,3b,%1,%0) in do_entUnaUser()
800 EXC(2b,3b,%2,%0) in do_entUnaUser()
810 "1: ldq_u %1,0(%3)\n" in do_entUnaUser()
811 "2: ldq_u %2,7(%3)\n" in do_entUnaUser()
812 " extql %1,%3,%1\n" in do_entUnaUser()
813 " extqh %2,%3,%2\n" in do_entUnaUser()
814 "3:\n" in do_entUnaUser()
815 EXC(1b,3b,%1,%0) in do_entUnaUser()
816 EXC(2b,3b,%2,%0) in do_entUnaUser()
826 "1: ldq_u %1,0(%3)\n" in do_entUnaUser()
827 "2: ldq_u %2,3(%3)\n" in do_entUnaUser()
828 " extll %1,%3,%1\n" in do_entUnaUser()
829 " extlh %2,%3,%2\n" in do_entUnaUser()
830 "3:\n" in do_entUnaUser()
831 EXC(1b,3b,%1,%0) in do_entUnaUser()
832 EXC(2b,3b,%2,%0) in do_entUnaUser()
842 "1: ldq_u %1,0(%3)\n" in do_entUnaUser()
843 "2: ldq_u %2,7(%3)\n" in do_entUnaUser()
844 " extql %1,%3,%1\n" in do_entUnaUser()
845 " extqh %2,%3,%2\n" in do_entUnaUser()
846 "3:\n" in do_entUnaUser()
847 EXC(1b,3b,%1,%0) in do_entUnaUser()
848 EXC(2b,3b,%2,%0) in do_entUnaUser()
861 "1: ldq_u %2,1(%5)\n" in do_entUnaUser()
862 "2: ldq_u %1,0(%5)\n" in do_entUnaUser()
863 " inswh %6,%5,%4\n" in do_entUnaUser()
864 " inswl %6,%5,%3\n" in do_entUnaUser()
865 " mskwh %2,%5,%2\n" in do_entUnaUser()
866 " mskwl %1,%5,%1\n" in do_entUnaUser()
867 " or %2,%4,%2\n" in do_entUnaUser()
868 " or %1,%3,%1\n" in do_entUnaUser()
869 "3: stq_u %2,1(%5)\n" in do_entUnaUser()
870 "4: stq_u %1,0(%5)\n" in do_entUnaUser()
871 "5:\n" in do_entUnaUser()
874 EXC(3b,5b,$31,%0) in do_entUnaUser()
889 "1: ldq_u %2,3(%5)\n" in do_entUnaUser()
890 "2: ldq_u %1,0(%5)\n" in do_entUnaUser()
891 " inslh %6,%5,%4\n" in do_entUnaUser()
892 " insll %6,%5,%3\n" in do_entUnaUser()
893 " msklh %2,%5,%2\n" in do_entUnaUser()
894 " mskll %1,%5,%1\n" in do_entUnaUser()
895 " or %2,%4,%2\n" in do_entUnaUser()
896 " or %1,%3,%1\n" in do_entUnaUser()
897 "3: stq_u %2,3(%5)\n" in do_entUnaUser()
898 "4: stq_u %1,0(%5)\n" in do_entUnaUser()
899 "5:\n" in do_entUnaUser()
902 EXC(3b,5b,$31,%0) in do_entUnaUser()
917 "1: ldq_u %2,7(%5)\n" in do_entUnaUser()
918 "2: ldq_u %1,0(%5)\n" in do_entUnaUser()
919 " insqh %6,%5,%4\n" in do_entUnaUser()
920 " insql %6,%5,%3\n" in do_entUnaUser()
921 " mskqh %2,%5,%2\n" in do_entUnaUser()
922 " mskql %1,%5,%1\n" in do_entUnaUser()
923 " or %2,%4,%2\n" in do_entUnaUser()
924 " or %1,%3,%1\n" in do_entUnaUser()
925 "3: stq_u %2,7(%5)\n" in do_entUnaUser()
926 "4: stq_u %1,0(%5)\n" in do_entUnaUser()
927 "5:\n" in do_entUnaUser()
930 EXC(3b,5b,$31,%0) in do_entUnaUser()
950 regs->pc -= 4; /* make pc point to faulting insn */ in do_entUnaUser()
958 struct mm_struct *mm = current->mm; in do_entUnaUser()
970 regs->pc -= 4; in do_entUnaUser()
978 /* Tell PAL-code what global pointer we want in the kernel. */ in trap_init()
989 wrent(entIF, 3); in trap_init()