diff options
Diffstat (limited to 'arch/ia64/kernel/ivt.S')
-rw-r--r-- | arch/ia64/kernel/ivt.S | 114 |
1 files changed, 0 insertions, 114 deletions
diff --git a/arch/ia64/kernel/ivt.S b/arch/ia64/kernel/ivt.S index ec9a5fdfa1b9..179fd122e837 100644 --- a/arch/ia64/kernel/ivt.S +++ b/arch/ia64/kernel/ivt.S | |||
@@ -49,7 +49,6 @@ | |||
49 | 49 | ||
50 | #include <asm/asmmacro.h> | 50 | #include <asm/asmmacro.h> |
51 | #include <asm/break.h> | 51 | #include <asm/break.h> |
52 | #include <asm/ia32.h> | ||
53 | #include <asm/kregs.h> | 52 | #include <asm/kregs.h> |
54 | #include <asm/asm-offsets.h> | 53 | #include <asm/asm-offsets.h> |
55 | #include <asm/pgtable.h> | 54 | #include <asm/pgtable.h> |
@@ -1386,28 +1385,6 @@ END(ia32_exception) | |||
1386 | // 0x6a00 Entry 46 (size 16 bundles) IA-32 Intercept (30,31,59,70,71) | 1385 | // 0x6a00 Entry 46 (size 16 bundles) IA-32 Intercept (30,31,59,70,71) |
1387 | ENTRY(ia32_intercept) | 1386 | ENTRY(ia32_intercept) |
1388 | DBG_FAULT(46) | 1387 | DBG_FAULT(46) |
1389 | #ifdef CONFIG_IA32_SUPPORT | ||
1390 | mov r31=pr | ||
1391 | MOV_FROM_ISR(r16) | ||
1392 | ;; | ||
1393 | extr.u r17=r16,16,8 // get ISR.code | ||
1394 | mov r18=ar.eflag | ||
1395 | MOV_FROM_IIM(r19) // old eflag value | ||
1396 | ;; | ||
1397 | cmp.ne p6,p0=2,r17 | ||
1398 | (p6) br.cond.spnt 1f // not a system flag fault | ||
1399 | xor r16=r18,r19 | ||
1400 | ;; | ||
1401 | extr.u r17=r16,18,1 // get the eflags.ac bit | ||
1402 | ;; | ||
1403 | cmp.eq p6,p0=0,r17 | ||
1404 | (p6) br.cond.spnt 1f // eflags.ac bit didn't change | ||
1405 | ;; | ||
1406 | mov pr=r31,-1 // restore predicate registers | ||
1407 | RFI | ||
1408 | |||
1409 | 1: | ||
1410 | #endif // CONFIG_IA32_SUPPORT | ||
1411 | FAULT(46) | 1388 | FAULT(46) |
1412 | END(ia32_intercept) | 1389 | END(ia32_intercept) |
1413 | 1390 | ||
@@ -1416,12 +1393,7 @@ END(ia32_intercept) | |||
1416 | // 0x6b00 Entry 47 (size 16 bundles) IA-32 Interrupt (74) | 1393 | // 0x6b00 Entry 47 (size 16 bundles) IA-32 Interrupt (74) |
1417 | ENTRY(ia32_interrupt) | 1394 | ENTRY(ia32_interrupt) |
1418 | DBG_FAULT(47) | 1395 | DBG_FAULT(47) |
1419 | #ifdef CONFIG_IA32_SUPPORT | ||
1420 | mov r31=pr | ||
1421 | br.sptk.many dispatch_to_ia32_handler | ||
1422 | #else | ||
1423 | FAULT(47) | 1396 | FAULT(47) |
1424 | #endif | ||
1425 | END(ia32_interrupt) | 1397 | END(ia32_interrupt) |
1426 | 1398 | ||
1427 | .org ia64_ivt+0x6c00 | 1399 | .org ia64_ivt+0x6c00 |
@@ -1715,89 +1687,3 @@ ENTRY(dispatch_illegal_op_fault) | |||
1715 | (p6) br.call.dpnt.many b6=b6 // call returns to ia64_leave_kernel | 1687 | (p6) br.call.dpnt.many b6=b6 // call returns to ia64_leave_kernel |
1716 | br.sptk.many ia64_leave_kernel | 1688 | br.sptk.many ia64_leave_kernel |
1717 | END(dispatch_illegal_op_fault) | 1689 | END(dispatch_illegal_op_fault) |
1718 | |||
1719 | #ifdef CONFIG_IA32_SUPPORT | ||
1720 | |||
1721 | /* | ||
1722 | * There is no particular reason for this code to be here, other than that | ||
1723 | * there happens to be space here that would go unused otherwise. If this | ||
1724 | * fault ever gets "unreserved", simply moved the following code to a more | ||
1725 | * suitable spot... | ||
1726 | */ | ||
1727 | |||
1728 | // IA32 interrupt entry point | ||
1729 | |||
1730 | ENTRY(dispatch_to_ia32_handler) | ||
1731 | SAVE_MIN | ||
1732 | ;; | ||
1733 | MOV_FROM_ISR(r14) | ||
1734 | SSM_PSR_IC_AND_DEFAULT_BITS_AND_SRLZ_I(r3, r24) | ||
1735 | // guarantee that interruption collection is on | ||
1736 | ;; | ||
1737 | SSM_PSR_I(p15, p15, r3) | ||
1738 | adds r3=8,r2 // Base pointer for SAVE_REST | ||
1739 | ;; | ||
1740 | SAVE_REST | ||
1741 | ;; | ||
1742 | mov r15=0x80 | ||
1743 | shr r14=r14,16 // Get interrupt number | ||
1744 | ;; | ||
1745 | cmp.ne p6,p0=r14,r15 | ||
1746 | (p6) br.call.dpnt.many b6=non_ia32_syscall | ||
1747 | |||
1748 | adds r14=IA64_PT_REGS_R8_OFFSET + 16,sp // 16 byte hole per SW conventions | ||
1749 | adds r15=IA64_PT_REGS_R1_OFFSET + 16,sp | ||
1750 | ;; | ||
1751 | cmp.eq pSys,pNonSys=r0,r0 // set pSys=1, pNonSys=0 | ||
1752 | ld8 r8=[r14] // get r8 | ||
1753 | ;; | ||
1754 | st8 [r15]=r8 // save original EAX in r1 (IA32 procs don't use the GP) | ||
1755 | ;; | ||
1756 | alloc r15=ar.pfs,0,0,6,0 // must first in an insn group | ||
1757 | ;; | ||
1758 | ld4 r8=[r14],8 // r8 == eax (syscall number) | ||
1759 | mov r15=IA32_NR_syscalls | ||
1760 | ;; | ||
1761 | cmp.ltu.unc p6,p7=r8,r15 | ||
1762 | ld4 out1=[r14],8 // r9 == ecx | ||
1763 | ;; | ||
1764 | ld4 out2=[r14],8 // r10 == edx | ||
1765 | ;; | ||
1766 | ld4 out0=[r14] // r11 == ebx | ||
1767 | adds r14=(IA64_PT_REGS_R13_OFFSET) + 16,sp | ||
1768 | ;; | ||
1769 | ld4 out5=[r14],PT(R14)-PT(R13) // r13 == ebp | ||
1770 | ;; | ||
1771 | ld4 out3=[r14],PT(R15)-PT(R14) // r14 == esi | ||
1772 | adds r2=TI_FLAGS+IA64_TASK_SIZE,r13 | ||
1773 | ;; | ||
1774 | ld4 out4=[r14] // r15 == edi | ||
1775 | movl r16=ia32_syscall_table | ||
1776 | ;; | ||
1777 | (p6) shladd r16=r8,3,r16 // force ni_syscall if not valid syscall number | ||
1778 | ld4 r2=[r2] // r2 = current_thread_info()->flags | ||
1779 | ;; | ||
1780 | ld8 r16=[r16] | ||
1781 | and r2=_TIF_SYSCALL_TRACEAUDIT,r2 // mask trace or audit | ||
1782 | ;; | ||
1783 | mov b6=r16 | ||
1784 | movl r15=ia32_ret_from_syscall | ||
1785 | cmp.eq p8,p0=r2,r0 | ||
1786 | ;; | ||
1787 | mov rp=r15 | ||
1788 | (p8) br.call.sptk.many b6=b6 | ||
1789 | br.cond.sptk ia32_trace_syscall | ||
1790 | |||
1791 | non_ia32_syscall: | ||
1792 | alloc r15=ar.pfs,0,0,2,0 | ||
1793 | mov out0=r14 // interrupt # | ||
1794 | add out1=16,sp // pointer to pt_regs | ||
1795 | ;; // avoid WAW on CFM | ||
1796 | br.call.sptk.many rp=ia32_bad_interrupt | ||
1797 | .ret1: movl r15=ia64_leave_kernel | ||
1798 | ;; | ||
1799 | mov rp=r15 | ||
1800 | br.ret.sptk.many rp | ||
1801 | END(dispatch_to_ia32_handler) | ||
1802 | |||
1803 | #endif /* CONFIG_IA32_SUPPORT */ | ||