__irq_svc:
        svc_entry irq
 #ifdef CONFIG_PREEMPT
-       get_thread_info r8
-       ldr     r9, [r8, #TI_PREEMPT]           @ get preempt count
-       add     r7, r9, #1                      @ increment it
-       str     r7, [r8, #TI_PREEMPT]
+       get_thread_info tsk
+       ldr     r8, [tsk, #TI_PREEMPT]          @ get preempt count
+       add     r7, r8, #1                      @ increment it
+       str     r7, [tsk, #TI_PREEMPT]
 #endif
        irq_handler
 #ifdef CONFIG_PREEMPT
-       ldr     r0, [r8, #TI_FLAGS]             @ get flags
+       ldr     r0, [tsk, #TI_FLAGS]            @ get flags
        tst     r0, #_TIF_NEED_RESCHED
        blne    svc_preempt
 preempt_return:
-       ldr     r0, [r8, #TI_PREEMPT]           @ read preempt value
+       ldr     r0, [tsk, #TI_PREEMPT]          @ read preempt value
+       str     r8, [tsk, #TI_PREEMPT]          @ restore preempt count
        teq     r0, r7
-       str     r9, [r8, #TI_PREEMPT]           @ restore preempt count
        strne   r0, [r0, -r0]                   @ bug()
 #endif
        ldr     r0, [sp, #S_PSR]                @ irqs are already disabled
 
 #ifdef CONFIG_PREEMPT
 svc_preempt:
-       teq     r9, #0                          @ was preempt count = 0
+       teq     r8, #0                          @ was preempt count = 0
        ldreq   r6, .LCirq_stat
        movne   pc, lr                          @ no
        ldr     r0, [r6, #4]                    @ local_irq_count
        adds    r0, r0, r1
        movne   pc, lr
        mov     r7, #0                          @ preempt_schedule_irq
-       str     r7, [r8, #TI_PREEMPT]           @ expects preempt_count == 0
+       str     r7, [tsk, #TI_PREEMPT]          @ expects preempt_count == 0
 1:     bl      preempt_schedule_irq            @ irq en/disable is done inside
-       ldr     r0, [r8, #TI_FLAGS]             @ get new tasks TI_FLAGS
+       ldr     r0, [tsk, #TI_FLAGS]            @ get new tasks TI_FLAGS
        tst     r0, #_TIF_NEED_RESCHED
        beq     preempt_return                  @ go again
        b       1b
 __irq_usr:
        usr_entry irq
 
+       get_thread_info tsk
 #ifdef CONFIG_PREEMPT
-       get_thread_info r8
-       ldr     r9, [r8, #TI_PREEMPT]           @ get preempt count
-       add     r7, r9, #1                      @ increment it
-       str     r7, [r8, #TI_PREEMPT]
+       ldr     r8, [tsk, #TI_PREEMPT]          @ get preempt count
+       add     r7, r8, #1                      @ increment it
+       str     r7, [tsk, #TI_PREEMPT]
 #endif
        irq_handler
 #ifdef CONFIG_PREEMPT
-       ldr     r0, [r8, #TI_PREEMPT]
+       ldr     r0, [tsk, #TI_PREEMPT]
+       str     r8, [tsk, #TI_PREEMPT]
        teq     r0, r7
-       str     r9, [r8, #TI_PREEMPT]
        strne   r0, [r0, -r0]
-       mov     tsk, r8
-#else
-       get_thread_info tsk
 #endif
        mov     why, #0
        b       ret_to_user