Merge tag 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mst/vhost
[cris-mirror.git] / arch / c6x / kernel / switch_to.S
blob09177ed0fa5c7182809e8637d57b0c2e0f1aa2b1
1 /*
2  *  Copyright (C) 2011 Texas Instruments Incorporated
3  *  Author: Mark Salter (msalter@redhat.com)
4  *
5  *  This program is free software; you can redistribute it and/or modify
6  *  it under the terms of the GNU General Public License version 2 as
7  *  published by the Free Software Foundation.
8  */
10 #include <linux/linkage.h>
11 #include <asm/asm-offsets.h>
13 #define SP      B15
15         /*
16          * void __switch_to(struct thread_info *prev,
17          *                  struct thread_info *next,
18          *                  struct task_struct *tsk) ;
19          */
20 ENTRY(__switch_to)
21         LDDW    .D2T2   *+B4(THREAD_B15_14),B7:B6
22  ||     MV      .L2X    A4,B5   ; prev
23  ||     MV      .L1X    B4,A5   ; next
24  ||     MVC     .S2     RILC,B1
26         STW     .D2T2   B3,*+B5(THREAD_PC)
27  ||     STDW    .D1T1   A13:A12,*+A4(THREAD_A13_12)
28  ||     MVC     .S2     ILC,B0
30         LDW     .D2T2   *+B4(THREAD_PC),B3
31  ||     LDDW    .D1T1   *+A5(THREAD_A13_12),A13:A12
33         STDW    .D1T1   A11:A10,*+A4(THREAD_A11_10)
34  ||     STDW    .D2T2   B1:B0,*+B5(THREAD_RICL_ICL)
35 #ifndef __DSBT__
36  ||     MVKL    .S2     current_ksp,B1
37 #endif
39         STDW    .D2T2   B15:B14,*+B5(THREAD_B15_14)
40  ||     STDW    .D1T1   A15:A14,*+A4(THREAD_A15_14)
41 #ifndef __DSBT__
42  ||     MVKH    .S2     current_ksp,B1
43 #endif
45         ;; Switch to next SP
46         MV      .S2     B7,SP
47 #ifdef __DSBT__
48  ||     STW     .D2T2   B7,*+B14(current_ksp)
49 #else
50  ||     STW     .D2T2   B7,*B1
51  ||     MV      .L2     B6,B14
52 #endif
53  ||     LDDW    .D1T1   *+A5(THREAD_RICL_ICL),A1:A0
55         STDW    .D2T2   B11:B10,*+B5(THREAD_B11_10)
56  ||     LDDW    .D1T1   *+A5(THREAD_A15_14),A15:A14
58         STDW    .D2T2   B13:B12,*+B5(THREAD_B13_12)
59  ||     LDDW    .D1T1   *+A5(THREAD_A11_10),A11:A10
61         B       .S2     B3              ; return in next E1
62  ||     LDDW    .D2T2   *+B4(THREAD_B13_12),B13:B12
64         LDDW    .D2T2   *+B4(THREAD_B11_10),B11:B10
65         NOP
67         MV      .L2X    A0,B0
68  ||     MV      .S1     A6,A4
70         MVC     .S2     B0,ILC
71  ||     MV      .L2X    A1,B1
73         MVC     .S2     B1,RILC
74 ENDPROC(__switch_to)