Changeset 1eee8383 in mainline


Ignore:
Timestamp:
2005-05-18T16:09:25Z (20 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
6de2480e
Parents:
6b96ab44
Message:

IA-64 work.
Add ar.pfs and ar.unat (caller and callee) application registers to context_t.
Change st8/ld8 instructions on general registers to st8.spill and ld8.fill instructions.

Location:
arch/ia64
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • arch/ia64/include/context.h

    r6b96ab44 r1eee8383  
    3939
    4040struct context {
     41        __u64 pfs;
     42        __u64 unat_caller;
     43        __u64 unat_callee;
     44
    4145        /*
    4246         * General registers
  • arch/ia64/src/context.S

    r6b96ab44 r1eee8383  
    3333
    3434context_save:
    35         alloc loc0 = ar.pfs, 1, 9, 0, 0
     35        alloc loc0 = ar.pfs, 1, 10, 0, 0
     36        mov loc1 = ar.unat      ;;
     37       
     38        st8 [in0] = loc0, 8     ;;      /* save ar.pfs */
     39        st8 [in0] = loc1, 8     ;;      /* save ar.unat (caller) */
     40        mov loc2 = in0          ;;
     41        add in0 = 8, in0        ;;      /* skip ar.unat (callee) */
    3642       
    3743        /*
     
    4046
    4147        /*
    42          * Save general registers
     48         * Save general registers including NaT bits
    4349         */
    44         st8 [in0] = r1, 8       ;;
    45         st8 [in0] = r2, 8       ;;
    46         st8 [in0] = r3, 8       ;;
    47         st8 [in0] = r4, 8       ;;
    48         st8 [in0] = r5, 8       ;;
    49         st8 [in0] = r6, 8       ;;
    50         st8 [in0] = r7, 8       ;;
    51         st8 [in0] = r8, 8       ;;
    52         st8 [in0] = r9, 8       ;;
    53         st8 [in0] = r10, 8      ;;
    54         st8 [in0] = r11, 8      ;;
    55         st8 [in0] = r12, 8      ;;      /* save sp */
    56         st8 [in0] = r13, 8      ;;
    57         st8 [in0] = r14, 8      ;;
    58         st8 [in0] = r15, 8      ;;
    59         st8 [in0] = r16, 8      ;;
    60         st8 [in0] = r17, 8      ;;
    61         st8 [in0] = r18, 8      ;;
    62         st8 [in0] = r19, 8      ;;
    63         st8 [in0] = r20, 8      ;;
    64         st8 [in0] = r21, 8      ;;
    65         st8 [in0] = r22, 8      ;;
    66         st8 [in0] = r23, 8      ;;
    67         st8 [in0] = r24, 8      ;;
    68         st8 [in0] = r25, 8      ;;
    69         st8 [in0] = r26, 8      ;;
    70         st8 [in0] = r27, 8      ;;
    71         st8 [in0] = r28, 8      ;;
    72         st8 [in0] = r29, 8      ;;
    73         st8 [in0] = r30, 8      ;;
    74         st8 [in0] = r31, 8      ;;
     50        st8.spill [in0] = r1, 8         ;;
     51        st8.spill [in0] = r2, 8         ;;
     52        st8.spill [in0] = r3, 8         ;;
     53        st8.spill [in0] = r4, 8         ;;
     54        st8.spill [in0] = r5, 8         ;;
     55        st8.spill [in0] = r6, 8         ;;
     56        st8.spill [in0] = r7, 8         ;;
     57        st8.spill [in0] = r8, 8         ;;
     58        st8.spill [in0] = r9, 8         ;;
     59        st8.spill [in0] = r10, 8        ;;
     60        st8.spill [in0] = r11, 8        ;;
     61        st8.spill [in0] = r12, 8        ;;      /* save sp */
     62        st8.spill [in0] = r13, 8        ;;
     63        st8.spill [in0] = r14, 8        ;;
     64        st8.spill [in0] = r15, 8        ;;
     65        st8.spill [in0] = r16, 8        ;;
     66        st8.spill [in0] = r17, 8        ;;
     67        st8.spill [in0] = r18, 8        ;;
     68        st8.spill [in0] = r19, 8        ;;
     69        st8.spill [in0] = r20, 8        ;;
     70        st8.spill [in0] = r21, 8        ;;
     71        st8.spill [in0] = r22, 8        ;;
     72        st8.spill [in0] = r23, 8        ;;
     73        st8.spill [in0] = r24, 8        ;;
     74        st8.spill [in0] = r25, 8        ;;
     75        st8.spill [in0] = r26, 8        ;;
     76        st8.spill [in0] = r27, 8        ;;
     77        st8.spill [in0] = r28, 8        ;;
     78        st8.spill [in0] = r29, 8        ;;
     79        st8.spill [in0] = r30, 8        ;;
     80        st8.spill [in0] = r31, 8        ;;
     81
     82        mov loc3 = ar.unat              ;;
     83        st8 [loc2] = loc3               /* save ar.unat (callee) */
    7584
    7685        /*
    7786         * Save branch registers
    7887         */
    79         mov loc1 = b0           ;;
    80         st8 [in0] = loc1, 8             /* save pc */
    81         mov loc2 = b1           ;;
    82         st8 [in0] = loc2, 8
    83         mov loc3 = b2           ;;
     88        mov loc2 = b0           ;;
     89        st8 [in0] = loc2, 8             /* save pc */
     90        mov loc3 = b1           ;;
    8491        st8 [in0] = loc3, 8
    85         mov loc4 = b3           ;;
     92        mov loc4 = b2           ;;
    8693        st8 [in0] = loc4, 8
    87         mov loc5 = b4           ;;
     94        mov loc5 = b3           ;;
    8895        st8 [in0] = loc5, 8
    89         mov loc6 = b5           ;;
     96        mov loc6 = b4           ;;
    9097        st8 [in0] = loc6, 8
    91         mov loc7 = b6           ;;
     98        mov loc7 = b5           ;;
    9299        st8 [in0] = loc7, 8
    93         mov loc8 = b7           ;;
     100        mov loc8 = b6           ;;
    94101        st8 [in0] = loc8, 8
     102        mov loc9 = b7           ;;
     103        st8 [in0] = loc9, 8
    95104
    96105        /*
    97106         * Save predicate registers
    98107         */
    99         mov loc1 = pr           ;;
    100         st8 [in0] = loc1, 8
     108        mov loc2 = pr           ;;
     109        st8 [in0] = loc2, 8
    101110       
    102111        mov ar.pfs = loc0
     112        mov ar.unat = loc1
    103113       
    104114        add r8 = r0, r0, 1              /* context_save returns 1 */
     
    106116
    107117context_restore:
    108         alloc loc0 = ar.pfs, 1, 9, 0, 0
     118        alloc loc0 = ar.pfs, 1, 10, 0, 0        ;;
    109119
    110120        /*
     
    112122         */
    113123       
     124        ld8 loc0 = [in0], 8     ;;      /* load pfs */
     125        ld8 loc1 = [in0], 8     ;;      /* load unat (caller) */
     126        ld8 loc2 = [in0], 8     ;;      /* load unat (callee) */
     127       
     128        mov ar.unat = loc2      ;;
     129       
    114130        /*
    115          * Restore general registers
     131         * Restore general registers including NaT bits
    116132         */
    117         ld8 r1 = [in0], 8       ;;
    118         ld8 r2 = [in0], 8       ;;
    119         ld8 r3 = [in0], 8       ;;
    120         ld8 r4 = [in0], 8       ;;
    121         ld8 r5 = [in0], 8       ;;
    122         ld8 r6 = [in0], 8       ;;
    123         ld8 r7 = [in0], 8       ;;
    124         ld8 r8 = [in0], 8       ;;
    125         ld8 r9 = [in0], 8       ;;
    126         ld8 r10 = [in0], 8      ;;
    127         ld8 r11 = [in0], 8      ;;
    128         ld8 r12 = [in0], 8      ;;      /* restore sp */
    129         ld8 r13 = [in0], 8      ;;
    130         ld8 r14 = [in0], 8      ;;
    131         ld8 r15 = [in0], 8      ;;
    132         ld8 r16 = [in0], 8      ;;
    133         ld8 r17 = [in0], 8      ;;
    134         ld8 r18 = [in0], 8      ;;
    135         ld8 r19 = [in0], 8      ;;
    136         ld8 r20 = [in0], 8      ;;
    137         ld8 r21 = [in0], 8      ;;
    138         ld8 r22 = [in0], 8      ;;
    139         ld8 r23 = [in0], 8      ;;
    140         ld8 r24 = [in0], 8      ;;
    141         ld8 r25 = [in0], 8      ;;
    142         ld8 r26 = [in0], 8      ;;
    143         ld8 r27 = [in0], 8      ;;
    144         ld8 r28 = [in0], 8      ;;
    145         ld8 r29 = [in0], 8      ;;
    146         ld8 r30 = [in0], 8      ;;
    147         ld8 r31 = [in0], 8      ;;
     133        ld8.fill r1 = [in0], 8  ;;
     134        ld8.fill r2 = [in0], 8  ;;
     135        ld8.fill r3 = [in0], 8  ;;
     136        ld8.fill r4 = [in0], 8  ;;
     137        ld8.fill r5 = [in0], 8  ;;
     138        ld8.fill r6 = [in0], 8  ;;
     139        ld8.fill r7 = [in0], 8  ;;
     140        ld8.fill r8 = [in0], 8  ;;
     141        ld8.fill r9 = [in0], 8  ;;
     142        ld8.fill r10 = [in0], 8 ;;
     143        ld8.fill r11 = [in0], 8 ;;
     144        ld8.fill r12 = [in0], 8 ;;      /* restore sp */
     145        ld8.fill r13 = [in0], 8 ;;
     146        ld8.fill r14 = [in0], 8 ;;
     147        ld8.fill r15 = [in0], 8 ;;
     148        ld8.fill r16 = [in0], 8 ;;
     149        ld8.fill r17 = [in0], 8 ;;
     150        ld8.fill r18 = [in0], 8 ;;
     151        ld8.fill r19 = [in0], 8 ;;
     152        ld8.fill r20 = [in0], 8 ;;
     153        ld8.fill r21 = [in0], 8 ;;
     154        ld8.fill r22 = [in0], 8 ;;
     155        ld8.fill r23 = [in0], 8 ;;
     156        ld8.fill r24 = [in0], 8 ;;
     157        ld8.fill r25 = [in0], 8 ;;
     158        ld8.fill r26 = [in0], 8 ;;
     159        ld8.fill r27 = [in0], 8 ;;
     160        ld8.fill r28 = [in0], 8 ;;
     161        ld8.fill r29 = [in0], 8 ;;
     162        ld8.fill r30 = [in0], 8 ;;
     163        ld8.fill r31 = [in0], 8 ;;
    148164
    149165        /*
    150166         * Restore branch registers
    151167         */
    152         ld8 loc1 = [in0], 8     ;;      /* restore pc */
    153         mov b0 = loc1
     168        ld8 loc2 = [in0], 8     ;;      /* restore pc */
     169        mov b0 = loc2
     170        ld8 loc3 = [in0], 8     ;;
     171        mov b1 = loc3
     172        ld8 loc4 = [in0], 8     ;;
     173        mov b2 = loc4
     174        ld8 loc5 = [in0], 8     ;;
     175        mov b3 = loc5
     176        ld8 loc6 = [in0], 8     ;;
     177        mov b4 = loc6
     178        ld8 loc7 = [in0], 8     ;;
     179        mov b5 = loc7
     180        ld8 loc8 = [in0], 8     ;;
     181        mov b6 = loc8
     182        ld8 loc9 = [in0], 8     ;;
     183        mov b7 = loc9
     184
     185        /*
     186         * Restore predicate registers
     187         */
    154188        ld8 loc2 = [in0], 8     ;;
    155         mov b1 = loc2
    156         ld8 loc3 = [in0], 8     ;;
    157         mov b2 = loc3
    158         ld8 loc4 = [in0], 8     ;;
    159         mov b3 = loc4
    160         ld8 loc5 = [in0], 8     ;;
    161         mov b4 = loc5
    162         ld8 loc6 = [in0], 8     ;;
    163         mov b5 = loc6
    164         ld8 loc7 = [in0], 8     ;;
    165         mov b6 = loc7
    166         ld8 loc8 = [in0], 8     ;;
    167         mov b7 = loc8
    168 
    169         ld8 loc1 = [in0], 8     ;;
    170         mov pr = loc1, ~0
     189        mov pr = loc2, ~0
    171190       
    172191        mov ar.pfs = loc0
     192        mov ar.unat = loc1
    173193       
    174194        mov r8 = r0                     /* context_restore returns 0 */
Note: See TracChangeset for help on using the changeset viewer.