diff options
author | dfr <dfr@FreeBSD.org> | 2001-11-27 09:49:53 +0000 |
---|---|---|
committer | dfr <dfr@FreeBSD.org> | 2001-11-27 09:49:53 +0000 |
commit | ed1267af935476fb768bfcb94117dfb134ef43c4 (patch) | |
tree | 596ece76912881548148314cb369885ee364628d /sys | |
parent | 6d4362392cd5164d9023ef6bf2488d2aca4b67c0 (diff) | |
download | FreeBSD-src-ed1267af935476fb768bfcb94117dfb134ef43c4.zip FreeBSD-src-ed1267af935476fb768bfcb94117dfb134ef43c4.tar.gz |
Minor tweaks to the TLB handling code - avoid movl instructions and add
itc.x instructions to attempt to avoid the little flurry of TLB exceptions
for handling access, dirty etc.
Diffstat (limited to 'sys')
-rw-r--r-- | sys/ia64/ia64/exception.S | 26 | ||||
-rw-r--r-- | sys/ia64/ia64/exception.s | 26 |
2 files changed, 26 insertions, 26 deletions
diff --git a/sys/ia64/ia64/exception.S b/sys/ia64/ia64/exception.S index 79f1b8a..faac9d5 100644 --- a/sys/ia64/ia64/exception.S +++ b/sys/ia64/ia64/exception.S @@ -125,9 +125,8 @@ interruption_Instruction_TLB: add r20=16,r18 // address of tag ;; ld8.acq r23=[r20] // read old tag - movl r24=(1<<63) // ti bit ;; - or r23=r23,r24 // set ti bit + dep r23=-1,r23,63,1 // set ti bit ;; st8.rel [r20]=r23 // store old tag + ti ;; @@ -141,7 +140,8 @@ interruption_Instruction_TLB: ;; mov pr=r17,0x1ffff // restore predicates ;; - rfi // walker will retry the access + itc.i r21 // and place in TLB + rfi 3: add r20=24,r20 // next in chain ;; @@ -201,9 +201,8 @@ interruption_Data_TLB: add r20=16,r18 // address of tag ;; ld8.acq r23=[r20] // read old tag - movl r24=(1<<63) // ti bit ;; - or r23=r23,r24 // set ti bit + dep r23=-1,r23,63,1 // set ti bit ;; st8.rel [r20]=r23 // store old tag + ti ;; @@ -217,7 +216,8 @@ interruption_Data_TLB: ;; mov pr=r17,0x1ffff // restore predicates ;; - rfi // walker will retry the access + itc.d r21 // and place in TLB + rfi 3: add r20=24,r20 // next in chain ;; @@ -336,9 +336,8 @@ interruption_Dirty_Bit: add r20=16,r18 // address of tag ;; ld8.acq r23=[r20] // read old tag - movl r24=(1<<63) // ti bit ;; - or r23=r23,r24 // set ti bit + dep r23=-1,r23,63,1 // set ti bit ;; st8.rel [r20]=r23 // store old tag + ti ;; @@ -352,7 +351,8 @@ interruption_Dirty_Bit: ;; mov pr=r17,0x1ffff // restore predicates ;; - rfi // walker will retry the access + itc.d r21 // and place in TLB + rfi 2: add r20=24,r20 // next in chain ;; @@ -405,9 +405,8 @@ interruption_Instruction_Access_Bit: add r20=16,r18 // address of tag ;; ld8.acq r23=[r20] // read old tag - movl r24=(1<<63) // ti bit ;; - or r23=r23,r24 // set ti bit + dep r23=-1,r23,63,1 // set ti bit ;; st8.rel [r20]=r23 // store old tag + ti ;; @@ -421,6 +420,7 @@ interruption_Instruction_Access_Bit: ;; mov pr=r17,0x1ffff // restore predicates ;; + itc.i r21 // and place in TLB rfi // walker will retry the access 2: add r20=24,r20 // next in chain @@ -474,9 +474,8 @@ interruption_Data_Access_Bit: add r20=16,r18 // address of tag ;; ld8.acq r23=[r20] // read old tag - movl r24=(1<<63) // ti bit ;; - or r23=r23,r24 // set ti bit + dep r23=-1,r23,63,1 // set ti bit ;; st8.rel [r20]=r23 // store old tag + ti ;; @@ -490,6 +489,7 @@ interruption_Data_Access_Bit: ;; mov pr=r17,0x1ffff // restore predicates ;; + itc.d r21 // and place in TLB rfi // walker will retry the access 2: add r20=24,r20 // next in chain diff --git a/sys/ia64/ia64/exception.s b/sys/ia64/ia64/exception.s index 79f1b8a..faac9d5 100644 --- a/sys/ia64/ia64/exception.s +++ b/sys/ia64/ia64/exception.s @@ -125,9 +125,8 @@ interruption_Instruction_TLB: add r20=16,r18 // address of tag ;; ld8.acq r23=[r20] // read old tag - movl r24=(1<<63) // ti bit ;; - or r23=r23,r24 // set ti bit + dep r23=-1,r23,63,1 // set ti bit ;; st8.rel [r20]=r23 // store old tag + ti ;; @@ -141,7 +140,8 @@ interruption_Instruction_TLB: ;; mov pr=r17,0x1ffff // restore predicates ;; - rfi // walker will retry the access + itc.i r21 // and place in TLB + rfi 3: add r20=24,r20 // next in chain ;; @@ -201,9 +201,8 @@ interruption_Data_TLB: add r20=16,r18 // address of tag ;; ld8.acq r23=[r20] // read old tag - movl r24=(1<<63) // ti bit ;; - or r23=r23,r24 // set ti bit + dep r23=-1,r23,63,1 // set ti bit ;; st8.rel [r20]=r23 // store old tag + ti ;; @@ -217,7 +216,8 @@ interruption_Data_TLB: ;; mov pr=r17,0x1ffff // restore predicates ;; - rfi // walker will retry the access + itc.d r21 // and place in TLB + rfi 3: add r20=24,r20 // next in chain ;; @@ -336,9 +336,8 @@ interruption_Dirty_Bit: add r20=16,r18 // address of tag ;; ld8.acq r23=[r20] // read old tag - movl r24=(1<<63) // ti bit ;; - or r23=r23,r24 // set ti bit + dep r23=-1,r23,63,1 // set ti bit ;; st8.rel [r20]=r23 // store old tag + ti ;; @@ -352,7 +351,8 @@ interruption_Dirty_Bit: ;; mov pr=r17,0x1ffff // restore predicates ;; - rfi // walker will retry the access + itc.d r21 // and place in TLB + rfi 2: add r20=24,r20 // next in chain ;; @@ -405,9 +405,8 @@ interruption_Instruction_Access_Bit: add r20=16,r18 // address of tag ;; ld8.acq r23=[r20] // read old tag - movl r24=(1<<63) // ti bit ;; - or r23=r23,r24 // set ti bit + dep r23=-1,r23,63,1 // set ti bit ;; st8.rel [r20]=r23 // store old tag + ti ;; @@ -421,6 +420,7 @@ interruption_Instruction_Access_Bit: ;; mov pr=r17,0x1ffff // restore predicates ;; + itc.i r21 // and place in TLB rfi // walker will retry the access 2: add r20=24,r20 // next in chain @@ -474,9 +474,8 @@ interruption_Data_Access_Bit: add r20=16,r18 // address of tag ;; ld8.acq r23=[r20] // read old tag - movl r24=(1<<63) // ti bit ;; - or r23=r23,r24 // set ti bit + dep r23=-1,r23,63,1 // set ti bit ;; st8.rel [r20]=r23 // store old tag + ti ;; @@ -490,6 +489,7 @@ interruption_Data_Access_Bit: ;; mov pr=r17,0x1ffff // restore predicates ;; + itc.d r21 // and place in TLB rfi // walker will retry the access 2: add r20=24,r20 // next in chain |