From 7e3adc7d11a2fc57fd809da0aaca2a89f0a2b4af Mon Sep 17 00:00:00 2001 From: Marcel Moolenaar Date: Sun, 30 Dec 2001 09:22:08 +0000 Subject: [PATCH] Add missing predicate in interruption_Data_TLB. Without this predicate we never used the VHPT entry we found. While here, normalize the compares. --- sys/ia64/ia64/exception.S | 46 +++++++++++++++++++-------------------- sys/ia64/ia64/exception.s | 46 +++++++++++++++++++-------------------- 2 files changed, 46 insertions(+), 46 deletions(-) diff --git a/sys/ia64/ia64/exception.S b/sys/ia64/ia64/exception.S index c8a86b8a4be..25505ddf23e 100644 --- a/sys/ia64/ia64/exception.S +++ b/sys/ia64/ia64/exception.S @@ -92,8 +92,8 @@ interruption_Instruction_TLB: ;; ld8 r21=[r21] // check VHPT tag ;; - cmp.eq p1,p2=r21,r19 -(p2) br.dpnt.few 1f + cmp.ne p1,p0=r21,r19 +(p1) br.dpnt.few 1f ;; ld8 r21=[r18] // read pte ;; @@ -106,15 +106,15 @@ interruption_Instruction_TLB: ;; srlz.d // serialize ;; -2: cmp.eq p1,p2=r0,r20 // done? +2: cmp.eq p1,p0=r0,r20 // done? (p1) br.cond.spnt.few 9f // bail if done ;; add r21=16,r20 // tag location ;; ld8 r21=[r21] // read tag ;; - cmp.eq p1,p2=r21,r19 // compare tags -(p2) br.cond.sptk.few 3f // if not, read next in chain + cmp.ne p1,p0=r21,r19 // compare tags +(p1) br.cond.sptk.few 3f // if not, read next in chain ;; ld8 r21=[r20],8 // read pte ;; @@ -142,7 +142,7 @@ interruption_Instruction_TLB: ;; itc.i r21 // and place in TLB rfi - + 3: add r20=24,r20 // next in chain ;; ld8 r20=[r20] // read chain @@ -168,8 +168,8 @@ interruption_Data_TLB: ;; ld8 r21=[r21] // check VHPT tag ;; - cmp.eq p1,p2=r21,r19 - br.dpnt.few 1f + cmp.ne p1,p0=r21,r19 +(p1) br.dpnt.few 1f ;; ld8 r21=[r18] // read pte ;; @@ -182,15 +182,15 @@ interruption_Data_TLB: ;; srlz.d // serialize ;; -2: cmp.eq p1,p2=r0,r20 // done? +2: cmp.eq p1,p0=r0,r20 // done? (p1) br.cond.spnt.few 9f // bail if done ;; add r21=16,r20 // tag location ;; ld8 r21=[r21] // read tag ;; - cmp.eq p1,p2=r21,r19 // compare tags -(p2) br.cond.sptk.few 3f // if not, read next in chain + cmp.ne p1,p0=r21,r19 // compare tags +(p1) br.cond.sptk.few 3f // if not, read next in chain ;; ld8 r21=[r20],8 // read pte ;; @@ -312,15 +312,15 @@ interruption_Dirty_Bit: ;; srlz.d // serialize ;; -1: cmp.eq p1,p2=r0,r20 // done? +1: cmp.eq p1,p0=r0,r20 // done? (p1) br.cond.spnt.few 9f // bail if done ;; add r21=16,r20 // tag location ;; ld8 r21=[r21] // read tag ;; - cmp.eq p1,p2=r21,r19 // compare tags -(p2) br.cond.sptk.few 2f // if not, read next in chain + cmp.ne p1,p0=r21,r19 // compare tags +(p1) br.cond.sptk.few 2f // if not, read next in chain ;; ld8 r21=[r20] // read pte mov r22=PTE_D @@ -381,15 +381,15 @@ interruption_Instruction_Access_Bit: ;; srlz.d // serialize ;; -1: cmp.eq p1,p2=r0,r20 // done? +1: cmp.eq p1,p0=r0,r20 // done? (p1) br.cond.spnt.few 9f // bail if done ;; add r21=16,r20 // tag location ;; ld8 r21=[r21] // read tag ;; - cmp.eq p1,p2=r21,r19 // compare tags -(p2) br.cond.sptk.few 2f // if not, read next in chain + cmp.ne p1,p0=r21,r19 // compare tags +(p1) br.cond.sptk.few 2f // if not, read next in chain ;; ld8 r21=[r20] // read pte mov r22=PTE_A @@ -450,15 +450,15 @@ interruption_Data_Access_Bit: ;; srlz.d // serialize ;; -1: cmp.eq p1,p2=r0,r20 // done? +1: cmp.eq p1,p0=r0,r20 // done? (p1) br.cond.spnt.few 9f // bail if done ;; add r21=16,r20 // tag location ;; ld8 r21=[r21] // read tag ;; - cmp.eq p1,p2=r21,r19 // compare tags -(p2) br.cond.sptk.few 2f // if not, read next in chain + cmp.ne p1,p0=r21,r19 // compare tags +(p1) br.cond.sptk.few 2f // if not, read next in chain ;; ld8 r21=[r20] // read pte mov r22=PTE_A @@ -505,12 +505,12 @@ interruption_Break: mov r16=pr // save pr for a moment mov r17=cr.iim;; // read break value mov r18=0x100000;; // syscall number - cmp.eq p6,p7=r18,r17;; // check for syscall -(p7) br.dpnt.few 9f + cmp.ne p6,p0=r18,r17;; // check for syscall +(p6) br.dpnt.few 9f mov r17=cr.ipsr;; // check for user mode extr.u r17=r17,32,2;; - cmp.eq p6,p7=r0,r17 + cmp.eq p6,p0=r0,r17 (p6) br.dpnt.few 9f // trap if kernel mode // Note: p6 and p7 are temporaries so we don't need to restore diff --git a/sys/ia64/ia64/exception.s b/sys/ia64/ia64/exception.s index c8a86b8a4be..25505ddf23e 100644 --- a/sys/ia64/ia64/exception.s +++ b/sys/ia64/ia64/exception.s @@ -92,8 +92,8 @@ interruption_Instruction_TLB: ;; ld8 r21=[r21] // check VHPT tag ;; - cmp.eq p1,p2=r21,r19 -(p2) br.dpnt.few 1f + cmp.ne p1,p0=r21,r19 +(p1) br.dpnt.few 1f ;; ld8 r21=[r18] // read pte ;; @@ -106,15 +106,15 @@ interruption_Instruction_TLB: ;; srlz.d // serialize ;; -2: cmp.eq p1,p2=r0,r20 // done? +2: cmp.eq p1,p0=r0,r20 // done? (p1) br.cond.spnt.few 9f // bail if done ;; add r21=16,r20 // tag location ;; ld8 r21=[r21] // read tag ;; - cmp.eq p1,p2=r21,r19 // compare tags -(p2) br.cond.sptk.few 3f // if not, read next in chain + cmp.ne p1,p0=r21,r19 // compare tags +(p1) br.cond.sptk.few 3f // if not, read next in chain ;; ld8 r21=[r20],8 // read pte ;; @@ -142,7 +142,7 @@ interruption_Instruction_TLB: ;; itc.i r21 // and place in TLB rfi - + 3: add r20=24,r20 // next in chain ;; ld8 r20=[r20] // read chain @@ -168,8 +168,8 @@ interruption_Data_TLB: ;; ld8 r21=[r21] // check VHPT tag ;; - cmp.eq p1,p2=r21,r19 - br.dpnt.few 1f + cmp.ne p1,p0=r21,r19 +(p1) br.dpnt.few 1f ;; ld8 r21=[r18] // read pte ;; @@ -182,15 +182,15 @@ interruption_Data_TLB: ;; srlz.d // serialize ;; -2: cmp.eq p1,p2=r0,r20 // done? +2: cmp.eq p1,p0=r0,r20 // done? (p1) br.cond.spnt.few 9f // bail if done ;; add r21=16,r20 // tag location ;; ld8 r21=[r21] // read tag ;; - cmp.eq p1,p2=r21,r19 // compare tags -(p2) br.cond.sptk.few 3f // if not, read next in chain + cmp.ne p1,p0=r21,r19 // compare tags +(p1) br.cond.sptk.few 3f // if not, read next in chain ;; ld8 r21=[r20],8 // read pte ;; @@ -312,15 +312,15 @@ interruption_Dirty_Bit: ;; srlz.d // serialize ;; -1: cmp.eq p1,p2=r0,r20 // done? +1: cmp.eq p1,p0=r0,r20 // done? (p1) br.cond.spnt.few 9f // bail if done ;; add r21=16,r20 // tag location ;; ld8 r21=[r21] // read tag ;; - cmp.eq p1,p2=r21,r19 // compare tags -(p2) br.cond.sptk.few 2f // if not, read next in chain + cmp.ne p1,p0=r21,r19 // compare tags +(p1) br.cond.sptk.few 2f // if not, read next in chain ;; ld8 r21=[r20] // read pte mov r22=PTE_D @@ -381,15 +381,15 @@ interruption_Instruction_Access_Bit: ;; srlz.d // serialize ;; -1: cmp.eq p1,p2=r0,r20 // done? +1: cmp.eq p1,p0=r0,r20 // done? (p1) br.cond.spnt.few 9f // bail if done ;; add r21=16,r20 // tag location ;; ld8 r21=[r21] // read tag ;; - cmp.eq p1,p2=r21,r19 // compare tags -(p2) br.cond.sptk.few 2f // if not, read next in chain + cmp.ne p1,p0=r21,r19 // compare tags +(p1) br.cond.sptk.few 2f // if not, read next in chain ;; ld8 r21=[r20] // read pte mov r22=PTE_A @@ -450,15 +450,15 @@ interruption_Data_Access_Bit: ;; srlz.d // serialize ;; -1: cmp.eq p1,p2=r0,r20 // done? +1: cmp.eq p1,p0=r0,r20 // done? (p1) br.cond.spnt.few 9f // bail if done ;; add r21=16,r20 // tag location ;; ld8 r21=[r21] // read tag ;; - cmp.eq p1,p2=r21,r19 // compare tags -(p2) br.cond.sptk.few 2f // if not, read next in chain + cmp.ne p1,p0=r21,r19 // compare tags +(p1) br.cond.sptk.few 2f // if not, read next in chain ;; ld8 r21=[r20] // read pte mov r22=PTE_A @@ -505,12 +505,12 @@ interruption_Break: mov r16=pr // save pr for a moment mov r17=cr.iim;; // read break value mov r18=0x100000;; // syscall number - cmp.eq p6,p7=r18,r17;; // check for syscall -(p7) br.dpnt.few 9f + cmp.ne p6,p0=r18,r17;; // check for syscall +(p6) br.dpnt.few 9f mov r17=cr.ipsr;; // check for user mode extr.u r17=r17,32,2;; - cmp.eq p6,p7=r0,r17 + cmp.eq p6,p0=r0,r17 (p6) br.dpnt.few 9f // trap if kernel mode // Note: p6 and p7 are temporaries so we don't need to restore