vserver 1.9.3
[linux-2.6.git] / arch / sparc64 / kernel / etrap.S
index 9468eac..d50b755 100644 (file)
@@ -17,7 +17,8 @@
 
 #define                TASK_REGOFF             (THREAD_SIZE-TRACEREG_SZ-STACKFRAME_SZ)
 #define                ETRAP_PSTATE1           (PSTATE_RMO | PSTATE_PRIV)
-#define                ETRAP_PSTATE2           (PSTATE_RMO | PSTATE_PEF | PSTATE_PRIV | PSTATE_IE)
+#define                ETRAP_PSTATE2           \
+               (PSTATE_RMO | PSTATE_PEF | PSTATE_PRIV | PSTATE_IE)
 
 /*
  * On entry, %g7 is return address - 0x4.
                .text           
                .align  64
                .globl  etrap, etrap_irq, etraptl1
-etrap:         rdpr    %pil, %g2                                               ! Single        Group
+etrap:         rdpr    %pil, %g2
 etrap_irq:
-               rdpr    %tstate, %g1                                            ! Single        Group
-               sllx    %g2, 20, %g3                                            ! IEU0          Group
-               andcc   %g1, TSTATE_PRIV, %g0                                   ! IEU1
-               or      %g1, %g3, %g1                                           ! IEU0          Group
-               bne,pn  %xcc, 1f                                                ! CTI
-                sub    %sp, STACKFRAME_SZ+TRACEREG_SZ-STACK_BIAS, %g2          ! IEU1
-               wrpr    %g0, 7, %cleanwin                                       ! Single        Group+4bubbles
-
-               sethi   %hi(TASK_REGOFF), %g2                                   ! IEU0          Group           
-               sethi   %hi(TSTATE_PEF), %g3                                    ! IEU1
-               or      %g2, %lo(TASK_REGOFF), %g2                              ! IEU0          Group
-               and     %g1, %g3, %g3                                           ! IEU1
-               brnz,pn %g3, 1f                                                 ! CTI+IEU1      Group
-                add    %g6, %g2, %g2                                           ! IEU0
-               wr      %g0, 0, %fprs                                           ! Single        Group+4bubbles
-1:             rdpr    %tpc, %g3                                               ! Single        Group
-
-               stx     %g1, [%g2 + STACKFRAME_SZ + PT_V9_TSTATE]               ! Store         Group
-               rdpr    %tnpc, %g1                                              ! Single        Group
-               stx     %g3, [%g2 + STACKFRAME_SZ + PT_V9_TPC]                  ! Store         Group
-               rd      %y, %g3                                                 ! Single        Group+4bubbles
-               stx     %g1, [%g2 + STACKFRAME_SZ + PT_V9_TNPC]                 ! Store         Group
-               st      %g3, [%g2 + STACKFRAME_SZ + PT_V9_Y]                    ! Store         Group
-               save    %g2, -STACK_BIAS, %sp   ! Ordering here is critical     ! Single        Group
-               mov     %g6, %l6                                                ! IEU0          Group
-
-               bne,pn  %xcc, 3f                                                ! CTI           
-                mov    PRIMARY_CONTEXT, %l4                                    ! IEU1
-               rdpr    %canrestore, %g3                                        ! Single        Group+4bubbles
-               rdpr    %wstate, %g2                                            ! Single        Group+4bubbles
-               wrpr    %g0, 0, %canrestore                                     ! Single        Group+4bubbles
-               sll     %g2, 3, %g2                                             ! IEU0          Group
-               mov     1, %l5                                                  ! IEU1
-               stb     %l5, [%l6 + TI_FPDEPTH]                                 ! Store
-
-               wrpr    %g3, 0, %otherwin                                       ! Single        Group+4bubbles
-               wrpr    %g2, 0, %wstate                                         ! Single        Group+4bubbles
-               stxa    %g0, [%l4] ASI_DMMU                                     ! Store         Group
-               flush   %l6                                                     ! Single        Group+9bubbles
-               wr      %g0, ASI_AIUS, %asi                                     ! Single        Group+4bubbles
-2:             wrpr    %g0, 0x0, %tl                                           ! Single        Group+4bubbles
-               mov     %g4, %l4                                                ! IEU1
-               mov     %g5, %l5                                                ! IEU0          Group
-
-               mov     %g7, %l2                                                ! IEU1
-               wrpr    %g0, ETRAP_PSTATE1, %pstate                             ! Single        Group+4bubbles
-               stx     %g1, [%sp + PTREGS_OFF + PT_V9_G1]                      ! Store         Group
-               stx     %g2, [%sp + PTREGS_OFF + PT_V9_G2]                      ! Store         Group
-               stx     %g3, [%sp + PTREGS_OFF + PT_V9_G3]                      ! Store         Group
-               stx     %g4, [%sp + PTREGS_OFF + PT_V9_G4]                      ! Store         Group
-               stx     %g5, [%sp + PTREGS_OFF + PT_V9_G5]                      ! Store         Group
-               stx     %g6, [%sp + PTREGS_OFF + PT_V9_G6]                      ! Store         Group
-
-               stx     %g7, [%sp + PTREGS_OFF + PT_V9_G7]                      ! Store         Group
-               stx     %i0, [%sp + PTREGS_OFF + PT_V9_I0]                      ! Store         Group
-               stx     %i1, [%sp + PTREGS_OFF + PT_V9_I1]                      ! Store         Group
-               stx     %i2, [%sp + PTREGS_OFF + PT_V9_I2]                      ! Store         Group
-               stx     %i3, [%sp + PTREGS_OFF + PT_V9_I3]                      ! Store         Group
-               stx     %i4, [%sp + PTREGS_OFF + PT_V9_I4]                      ! Store         Group
-               stx     %i5, [%sp + PTREGS_OFF + PT_V9_I5]                      ! Store         Group
-
-               stx     %i6, [%sp + PTREGS_OFF + PT_V9_I6]                      ! Store         Group
-               stx     %i7, [%sp + PTREGS_OFF + PT_V9_I7]                      ! Store         Group
-               wrpr    %g0, ETRAP_PSTATE2, %pstate                             ! Single        Group+4bubbles
-               mov     %l6, %g6                                                ! IEU0
-               jmpl    %l2 + 0x4, %g0                                          ! CTI           Group
-                ldx    [%g6 + TI_TASK], %g4                                    ! Load
+               rdpr    %tstate, %g1
+               sllx    %g2, 20, %g3
+               andcc   %g1, TSTATE_PRIV, %g0
+               or      %g1, %g3, %g1
+               bne,pn  %xcc, 1f
+                sub    %sp, STACKFRAME_SZ+TRACEREG_SZ-STACK_BIAS, %g2
+               wrpr    %g0, 7, %cleanwin
+
+               sethi   %hi(TASK_REGOFF), %g2
+               sethi   %hi(TSTATE_PEF), %g3
+               or      %g2, %lo(TASK_REGOFF), %g2
+               and     %g1, %g3, %g3
+               brnz,pn %g3, 1f
+                add    %g6, %g2, %g2
+               wr      %g0, 0, %fprs
+1:             rdpr    %tpc, %g3
+
+               stx     %g1, [%g2 + STACKFRAME_SZ + PT_V9_TSTATE]
+               rdpr    %tnpc, %g1
+               stx     %g3, [%g2 + STACKFRAME_SZ + PT_V9_TPC]
+               rd      %y, %g3
+               stx     %g1, [%g2 + STACKFRAME_SZ + PT_V9_TNPC]
+               st      %g3, [%g2 + STACKFRAME_SZ + PT_V9_Y]
+               save    %g2, -STACK_BIAS, %sp   ! Ordering here is critical
+               mov     %g6, %l6
+
+               bne,pn  %xcc, 3f
+                mov    PRIMARY_CONTEXT, %l4
+               rdpr    %canrestore, %g3
+               rdpr    %wstate, %g2
+               wrpr    %g0, 0, %canrestore
+               sll     %g2, 3, %g2
+               mov     1, %l5
+               stb     %l5, [%l6 + TI_FPDEPTH]
+
+               wrpr    %g3, 0, %otherwin
+               wrpr    %g2, 0, %wstate
+               stxa    %g0, [%l4] ASI_DMMU
+               flush   %l6
+               wr      %g0, ASI_AIUS, %asi
+2:             wrpr    %g0, 0x0, %tl
+               mov     %g4, %l4
+               mov     %g5, %l5
+
+               mov     %g7, %l2
+               wrpr    %g0, ETRAP_PSTATE1, %pstate
+               stx     %g1, [%sp + PTREGS_OFF + PT_V9_G1]
+               stx     %g2, [%sp + PTREGS_OFF + PT_V9_G2]
+               stx     %g3, [%sp + PTREGS_OFF + PT_V9_G3]
+               stx     %g4, [%sp + PTREGS_OFF + PT_V9_G4]
+               stx     %g5, [%sp + PTREGS_OFF + PT_V9_G5]
+               stx     %g6, [%sp + PTREGS_OFF + PT_V9_G6]
+
+               stx     %g7, [%sp + PTREGS_OFF + PT_V9_G7]
+               stx     %i0, [%sp + PTREGS_OFF + PT_V9_I0]
+               stx     %i1, [%sp + PTREGS_OFF + PT_V9_I1]
+               stx     %i2, [%sp + PTREGS_OFF + PT_V9_I2]
+               stx     %i3, [%sp + PTREGS_OFF + PT_V9_I3]
+               stx     %i4, [%sp + PTREGS_OFF + PT_V9_I4]
+               stx     %i5, [%sp + PTREGS_OFF + PT_V9_I5]
+
+               stx     %i6, [%sp + PTREGS_OFF + PT_V9_I6]
+               stx     %i7, [%sp + PTREGS_OFF + PT_V9_I7]
+               wrpr    %g0, ETRAP_PSTATE2, %pstate
+               mov     %l6, %g6
+               jmpl    %l2 + 0x4, %g0
+                ldx    [%g6 + TI_TASK], %g4
                nop
                nop
                nop
 
-3:             ldub    [%l6 + TI_FPDEPTH], %l5                                 ! Load          Group
-               add     %l6, TI_FPSAVED + 1, %l4                                ! IEU0
-               srl     %l5, 1, %l3                                             ! IEU0          Group
-               add     %l5, 2, %l5                                             ! IEU1
-               stb     %l5, [%l6 + TI_FPDEPTH]                                 ! Store
-               ba,pt   %xcc, 2b                                                ! CTI
-                stb    %g0, [%l4 + %l3]                                        ! Store         Group
+3:             ldub    [%l6 + TI_FPDEPTH], %l5
+               add     %l6, TI_FPSAVED + 1, %l4
+               srl     %l5, 1, %l3
+               add     %l5, 2, %l5
+               stb     %l5, [%l6 + TI_FPDEPTH]
+               ba,pt   %xcc, 2b
+                stb    %g0, [%l4 + %l3]
                nop
 
 etraptl1:      /* Save tstate/tpc/tnpc of TL 1-->4 and the tl register itself.
-                * We place this right after pt_regs on the trap stack.  The layout
-                * is:
+                * We place this right after pt_regs on the trap stack.
+                * The layout is:
                 *      0x00    TL1's TSTATE
                 *      0x08    TL1's TPC
                 *      0x10    TL1's TNPC
@@ -166,81 +167,81 @@ etraptl1: /* Save tstate/tpc/tnpc of TL 1-->4 and the tl register itself.
                wrpr    %g1, %tl
                stx     %g1, [%g2 + STACK_BIAS + 0x80]
 
-               rdpr    %tstate, %g1                                            ! Single        Group+4bubbles
-               sub     %g2, STACKFRAME_SZ + TRACEREG_SZ - STACK_BIAS, %g2      ! IEU1
-               ba,pt   %xcc, 1b                                                ! CTI           Group
-                andcc  %g1, TSTATE_PRIV, %g0                                   ! IEU0
+               rdpr    %tstate, %g1
+               sub     %g2, STACKFRAME_SZ + TRACEREG_SZ - STACK_BIAS, %g2
+               ba,pt   %xcc, 1b
+                andcc  %g1, TSTATE_PRIV, %g0
 
                .align  64
                .globl  scetrap
-scetrap:       rdpr    %pil, %g2                                               ! Single        Group
-               rdpr    %tstate, %g1                                            ! Single        Group
-               sllx    %g2, 20, %g3                                            ! IEU0          Group
-               andcc   %g1, TSTATE_PRIV, %g0                                   ! IEU1
-               or      %g1, %g3, %g1                                           ! IEU0          Group
-               bne,pn  %xcc, 1f                                                ! CTI
-                sub    %sp, (STACKFRAME_SZ+TRACEREG_SZ-STACK_BIAS), %g2        ! IEU1
-               wrpr    %g0, 7, %cleanwin                                       ! Single        Group+4bubbles
-
-               sllx    %g1, 51, %g3                                            ! IEU0          Group
-               sethi   %hi(TASK_REGOFF), %g2                                   ! IEU1
-               or      %g2, %lo(TASK_REGOFF), %g2                              ! IEU0          Group
-               brlz,pn %g3, 1f                                                 ! CTI+IEU1
-                add    %g6, %g2, %g2                                           ! IEU0          Group
-               wr      %g0, 0, %fprs                                           ! Single        Group+4bubbles
-1:             rdpr    %tpc, %g3                                               ! Single        Group
-               stx     %g1, [%g2 + STACKFRAME_SZ + PT_V9_TSTATE]               ! Store         Group
-
-               rdpr    %tnpc, %g1                                              ! Single        Group
-               stx     %g3, [%g2 + STACKFRAME_SZ + PT_V9_TPC]                  ! Store         Group
-               stx     %g1, [%g2 + STACKFRAME_SZ + PT_V9_TNPC]                 ! Store         Group
-               save    %g2, -STACK_BIAS, %sp   ! Ordering here is critical     ! Single        Group
-               mov     %g6, %l6                                                ! IEU0          Group
-               bne,pn  %xcc, 2f                                                ! CTI           
-                mov    ASI_P, %l7                                              ! IEU1
-               rdpr    %canrestore, %g3                                        ! Single        Group+4bubbles
-
-               rdpr    %wstate, %g2                                            ! Single        Group+4bubbles
-               wrpr    %g0, 0, %canrestore                                     ! Single        Group+4bubbles
-               sll     %g2, 3, %g2                                             ! IEU0          Group
-               mov     PRIMARY_CONTEXT, %l4                                    ! IEU1
-               wrpr    %g3, 0, %otherwin                                       ! Single        Group+4bubbles
-               wrpr    %g2, 0, %wstate                                         ! Single        Group+4bubbles
-               stxa    %g0, [%l4] ASI_DMMU                                     ! Store
-               flush   %l6                                                     ! Single        Group+9bubbles
-
-               mov     ASI_AIUS, %l7                                           ! IEU0          Group
-2:             mov     %g4, %l4                                                ! IEU1
-               mov     %g5, %l5                                                ! IEU0          Group
-               add     %g7, 0x4, %l2                                           ! IEU1
-               wrpr    %g0, ETRAP_PSTATE1, %pstate                             ! Single        Group+4bubbles
-               stx     %g1, [%sp + PTREGS_OFF + PT_V9_G1]                      ! Store         Group
-               stx     %g2, [%sp + PTREGS_OFF + PT_V9_G2]                      ! Store         Group
-               sllx    %l7, 24, %l7                                            ! IEU0
-
-               stx     %g3, [%sp + PTREGS_OFF + PT_V9_G3]                      ! Store         Group
-               rdpr    %cwp, %l0                                               ! Single        Group
-               stx     %g4, [%sp + PTREGS_OFF + PT_V9_G4]                      ! Store         Group
-               stx     %g5, [%sp + PTREGS_OFF + PT_V9_G5]                      ! Store         Group
-               stx     %g6, [%sp + PTREGS_OFF + PT_V9_G6]                      ! Store         Group
-               stx     %g7, [%sp + PTREGS_OFF + PT_V9_G7]                      ! Store         Group
-               or      %l7, %l0, %l7                                           ! IEU0
-               sethi   %hi(TSTATE_RMO | TSTATE_PEF), %l0                       ! IEU1
-
-               or      %l7, %l0, %l7                                           ! IEU0          Group
-               wrpr    %l2, %tnpc                                              ! Single        Group+4bubbles
-               wrpr    %l7, (TSTATE_PRIV | TSTATE_IE), %tstate                 ! Single        Group+4bubbles
-               stx     %i0, [%sp + PTREGS_OFF + PT_V9_I0]                      ! Store         Group
-               stx     %i1, [%sp + PTREGS_OFF + PT_V9_I1]                      ! Store         Group
-               stx     %i2, [%sp + PTREGS_OFF + PT_V9_I2]                      ! Store         Group
-               stx     %i3, [%sp + PTREGS_OFF + PT_V9_I3]                      ! Store         Group
-               stx     %i4, [%sp + PTREGS_OFF + PT_V9_I4]                      ! Store         Group
-
-               stx     %i5, [%sp + PTREGS_OFF + PT_V9_I5]                      ! Store         Group
-               stx     %i6, [%sp + PTREGS_OFF + PT_V9_I6]                      ! Store         Group
-               mov     %l6, %g6                                                ! IEU1
-               stx     %i7, [%sp + PTREGS_OFF + PT_V9_I7]                      ! Store         Group
-               ldx     [%g6 + TI_TASK], %g4                                    ! Load          Group
+scetrap:       rdpr    %pil, %g2
+               rdpr    %tstate, %g1
+               sllx    %g2, 20, %g3
+               andcc   %g1, TSTATE_PRIV, %g0
+               or      %g1, %g3, %g1
+               bne,pn  %xcc, 1f
+                sub    %sp, (STACKFRAME_SZ+TRACEREG_SZ-STACK_BIAS), %g2
+               wrpr    %g0, 7, %cleanwin
+
+               sllx    %g1, 51, %g3
+               sethi   %hi(TASK_REGOFF), %g2
+               or      %g2, %lo(TASK_REGOFF), %g2
+               brlz,pn %g3, 1f
+                add    %g6, %g2, %g2
+               wr      %g0, 0, %fprs
+1:             rdpr    %tpc, %g3
+               stx     %g1, [%g2 + STACKFRAME_SZ + PT_V9_TSTATE]
+
+               rdpr    %tnpc, %g1
+               stx     %g3, [%g2 + STACKFRAME_SZ + PT_V9_TPC]
+               stx     %g1, [%g2 + STACKFRAME_SZ + PT_V9_TNPC]
+               save    %g2, -STACK_BIAS, %sp   ! Ordering here is critical
+               mov     %g6, %l6
+               bne,pn  %xcc, 2f
+                mov    ASI_P, %l7
+               rdpr    %canrestore, %g3
+
+               rdpr    %wstate, %g2
+               wrpr    %g0, 0, %canrestore
+               sll     %g2, 3, %g2
+               mov     PRIMARY_CONTEXT, %l4
+               wrpr    %g3, 0, %otherwin
+               wrpr    %g2, 0, %wstate
+               stxa    %g0, [%l4] ASI_DMMU
+               flush   %l6
+
+               mov     ASI_AIUS, %l7
+2:             mov     %g4, %l4
+               mov     %g5, %l5
+               add     %g7, 0x4, %l2
+               wrpr    %g0, ETRAP_PSTATE1, %pstate
+               stx     %g1, [%sp + PTREGS_OFF + PT_V9_G1]
+               stx     %g2, [%sp + PTREGS_OFF + PT_V9_G2]
+               sllx    %l7, 24, %l7
+
+               stx     %g3, [%sp + PTREGS_OFF + PT_V9_G3]
+               rdpr    %cwp, %l0
+               stx     %g4, [%sp + PTREGS_OFF + PT_V9_G4]
+               stx     %g5, [%sp + PTREGS_OFF + PT_V9_G5]
+               stx     %g6, [%sp + PTREGS_OFF + PT_V9_G6]
+               stx     %g7, [%sp + PTREGS_OFF + PT_V9_G7]
+               or      %l7, %l0, %l7
+               sethi   %hi(TSTATE_RMO | TSTATE_PEF), %l0
+
+               or      %l7, %l0, %l7
+               wrpr    %l2, %tnpc
+               wrpr    %l7, (TSTATE_PRIV | TSTATE_IE), %tstate
+               stx     %i0, [%sp + PTREGS_OFF + PT_V9_I0]
+               stx     %i1, [%sp + PTREGS_OFF + PT_V9_I1]
+               stx     %i2, [%sp + PTREGS_OFF + PT_V9_I2]
+               stx     %i3, [%sp + PTREGS_OFF + PT_V9_I3]
+               stx     %i4, [%sp + PTREGS_OFF + PT_V9_I4]
+
+               stx     %i5, [%sp + PTREGS_OFF + PT_V9_I5]
+               stx     %i6, [%sp + PTREGS_OFF + PT_V9_I6]
+               mov     %l6, %g6
+               stx     %i7, [%sp + PTREGS_OFF + PT_V9_I7]
+               ldx     [%g6 + TI_TASK], %g4
                done
                nop
                nop