diff options
author | kmacy <kmacy@FreeBSD.org> | 2006-12-17 01:22:09 +0000 |
---|---|---|
committer | kmacy <kmacy@FreeBSD.org> | 2006-12-17 01:22:09 +0000 |
commit | 789d28d57752389a754e8d65a1b3804216fffe1a (patch) | |
tree | eb099fb8d9dba3a7be6f43e61bc405e92c1f6f81 /sys/sun4v | |
parent | f3bc63031579c611f88cb03ccb8cf748973f1eab (diff) | |
download | FreeBSD-src-789d28d57752389a754e8d65a1b3804216fffe1a.zip FreeBSD-src-789d28d57752389a754e8d65a1b3804216fffe1a.tar.gz |
eliminate extra branches by making better use of branch delay
slots and annulling
Diffstat (limited to 'sys/sun4v')
-rw-r--r-- | sys/sun4v/sun4v/interrupt.S | 54 |
1 files changed, 21 insertions, 33 deletions
diff --git a/sys/sun4v/sun4v/interrupt.S b/sys/sun4v/sun4v/interrupt.S index bacca37..4d3982b 100644 --- a/sys/sun4v/sun4v/interrupt.S +++ b/sys/sun4v/sun4v/interrupt.S @@ -404,18 +404,15 @@ ENTRY(tl_invlctx) mov MAP_ITLB|MAP_DTLB, %o3 mov MMU_DEMAP_CTX, %o5 ta FAST_TRAP - brz,pt %o0, 1f - nop - ba interrupt_panic_bad_hcall + brnz,a,pn %o0, interrupt_panic_bad_hcall mov MMU_DEMAP_CTX, %o1 -1: mov %g2, %o0 mov %g4, %o1 mov %g5, %o2 mov %g6, %o3 mov %g7, %o5 - ba,a,pt %xcc, set_ackmask - nop + ba,pt %xcc, set_ackmask + membar #Sync END(tl_invlctx) ENTRY(tl_invltlb) @@ -423,24 +420,19 @@ ENTRY(tl_invltlb) mov %o1, %g2 mov %o2, %g4 mov %o5, %g5 - - mov %g0, %o0 - mov %g0, %o1 + clr %o0 + clr %o1 mov MAP_ITLB | MAP_DTLB, %o2 mov MMU_DEMAP_ALL, %o5 ta FAST_TRAP - brz,pt %o0, 1f - nop - ba interrupt_panic_bad_hcall + brnz,a,pn %o0, interrupt_panic_bad_hcall mov MMU_DEMAP_ALL, %o1 -1: mov %g1, %o0 mov %g2, %o1 mov %g4, %o2 mov %g5, %o5 - - ba,a,pt %xcc, set_ackmask - nop + ba,pt %xcc, set_ackmask + membar #Sync END(tl_invltlb) ENTRY(tl_invlpg) @@ -449,18 +441,15 @@ ENTRY(tl_invlpg) mov %o2, %g7 mov MAP_ITLB|MAP_DTLB, %o2 mov %g1, %o0 - mov %g2, %o1 + mov %g2, %o1 ta MMU_UNMAP_ADDR - brz,pt %o0, 1f - nop - ba interrupt_panic_bad_hcall + brnz,a,pn %o0, interrupt_panic_bad_hcall mov MMU_UNMAP_ADDR, %o1 -1: mov %g5, %o0 mov %g6, %o1 mov %g7, %o2 - ba,a,pt %xcc, set_ackmask - nop + ba,pt %xcc, set_ackmask + membar #Sync END(tl_invlpg) ENTRY(tl_tsbupdate) @@ -470,16 +459,15 @@ ENTRY(tl_tsbupdate) cmp %g1, %g4 bne,a,pt %xcc, set_ackmask - nop + membar #Sync /* update scratch pointer to tsbscratch */ wr %g0, ASI_REAL, %asi ldxa [%g2]%asi, %g4 ! tsbscratch ldxa [%g2 + 8]%asi, %g2 ! tsb_ra mov SCRATCH_REG_TSB_USER, %g5 SET_SCRATCH(%g5, %g4) -/* reset tsb context with hypervisor */ - +/* reset tsb context with hypervisor */ mov %o0, %g1 mov %o1, %g2 mov %o5, %g4 @@ -487,12 +475,13 @@ ENTRY(tl_tsbupdate) mov %g2, %o1 mov MMU_TSB_CTXNON0, %o5 ta FAST_TRAP + /* XXX test %o0 */ - mov %g4, %o5 - mov %g2, %o1 mov %g1, %o0 - ba,a,pt %xcc, set_ackmask - nop + mov %g2, %o1 + mov %g4, %o5 + ba,pt %xcc, set_ackmask + membar #Sync END(tl_tsbupdate) ENTRY(tl_ttehashupdate) @@ -501,14 +490,13 @@ ENTRY(tl_ttehashupdate) GET_MMU_CONTEXT(%g4, %g4) cmp %g1, %g4 bne,a,pt %xcc, set_ackmask - nop + membar #Sync /* update scratch pointer to hashscratch */ mov SCRATCH_REG_HASH_USER, %g4 SET_SCRATCH(%g4, %g2) END(tl_ttehashupdate) ENTRY(set_ackmask) - membar #Sync GET_PCPU_PHYS_SCRATCH(%g6) wr %g0, ASI_REAL, %asi @@ -535,7 +523,7 @@ ENTRY(set_ackmask) 1: or %g1, %g4, %g2 casa [%g3]%asi, %g1, %g2 cmp %g1, %g2 - bne,a,pn %icc, 1b + bne,a,pn %xcc, 1b lda [%g3]%asi, %g1 retry END(set_ackmask) |