Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
asmmacro-64.h
Go to the documentation of this file.
1 /*
2  * asmmacro.h: Assembler macros to make things easier to read.
3  *
4  * Copyright (C) 1996 David S. Miller ([email protected])
5  * Copyright (C) 1998, 1999 Ralf Baechle
6  * Copyright (C) 1999 Silicon Graphics, Inc.
7  */
8 #ifndef _ASM_ASMMACRO_64_H
9 #define _ASM_ASMMACRO_64_H
10 
11 #include <asm/asm-offsets.h>
12 #include <asm/regdef.h>
13 #include <asm/fpregdef.h>
14 #include <asm/mipsregs.h>
15 
16  .macro fpu_save_16even thread tmp=t0
18  sdc1 $f0, THREAD_FPR0(\thread)
19  sdc1 $f2, THREAD_FPR2(\thread)
20  sdc1 $f4, THREAD_FPR4(\thread)
21  sdc1 $f6, THREAD_FPR6(\thread)
22  sdc1 $f8, THREAD_FPR8(\thread)
23  sdc1 $f10, THREAD_FPR10(\thread)
24  sdc1 $f12, THREAD_FPR12(\thread)
25  sdc1 $f14, THREAD_FPR14(\thread)
26  sdc1 $f16, THREAD_FPR16(\thread)
27  sdc1 $f18, THREAD_FPR18(\thread)
28  sdc1 $f20, THREAD_FPR20(\thread)
29  sdc1 $f22, THREAD_FPR22(\thread)
30  sdc1 $f24, THREAD_FPR24(\thread)
31  sdc1 $f26, THREAD_FPR26(\thread)
32  sdc1 $f28, THREAD_FPR28(\thread)
33  sdc1 $f30, THREAD_FPR30(\thread)
35  .endm
36 
37  .macro fpu_save_16odd thread
38  sdc1 $f1, THREAD_FPR1(\thread)
39  sdc1 $f3, THREAD_FPR3(\thread)
40  sdc1 $f5, THREAD_FPR5(\thread)
41  sdc1 $f7, THREAD_FPR7(\thread)
42  sdc1 $f9, THREAD_FPR9(\thread)
43  sdc1 $f11, THREAD_FPR11(\thread)
44  sdc1 $f13, THREAD_FPR13(\thread)
45  sdc1 $f15, THREAD_FPR15(\thread)
46  sdc1 $f17, THREAD_FPR17(\thread)
47  sdc1 $f19, THREAD_FPR19(\thread)
48  sdc1 $f21, THREAD_FPR21(\thread)
49  sdc1 $f23, THREAD_FPR23(\thread)
50  sdc1 $f25, THREAD_FPR25(\thread)
51  sdc1 $f27, THREAD_FPR27(\thread)
52  sdc1 $f29, THREAD_FPR29(\thread)
53  sdc1 $f31, THREAD_FPR31(\thread)
54  .endm
55 
56  .macro fpu_save_double thread status tmp
57  sll \tmp, \status, 5
58  bgez \tmp, 2f
59  fpu_save_16odd \thread
60 2:
61  fpu_save_16even \thread \tmp
62  .endm
63 
64  .macro fpu_restore_16even thread tmp=t0
65  lw \tmp, THREAD_FCR31(\thread)
66  ldc1 $f0, THREAD_FPR0(\thread)
67  ldc1 $f2, THREAD_FPR2(\thread)
68  ldc1 $f4, THREAD_FPR4(\thread)
69  ldc1 $f6, THREAD_FPR6(\thread)
70  ldc1 $f8, THREAD_FPR8(\thread)
71  ldc1 $f10, THREAD_FPR10(\thread)
72  ldc1 $f12, THREAD_FPR12(\thread)
73  ldc1 $f14, THREAD_FPR14(\thread)
74  ldc1 $f16, THREAD_FPR16(\thread)
75  ldc1 $f18, THREAD_FPR18(\thread)
76  ldc1 $f20, THREAD_FPR20(\thread)
77  ldc1 $f22, THREAD_FPR22(\thread)
78  ldc1 $f24, THREAD_FPR24(\thread)
79  ldc1 $f26, THREAD_FPR26(\thread)
80  ldc1 $f28, THREAD_FPR28(\thread)
81  ldc1 $f30, THREAD_FPR30(\thread)
82  ctc1 \tmp, fcr31
83  .endm
84 
85  .macro fpu_restore_16odd thread
86  ldc1 $f1, THREAD_FPR1(\thread)
87  ldc1 $f3, THREAD_FPR3(\thread)
88  ldc1 $f5, THREAD_FPR5(\thread)
89  ldc1 $f7, THREAD_FPR7(\thread)
90  ldc1 $f9, THREAD_FPR9(\thread)
91  ldc1 $f11, THREAD_FPR11(\thread)
92  ldc1 $f13, THREAD_FPR13(\thread)
93  ldc1 $f15, THREAD_FPR15(\thread)
94  ldc1 $f17, THREAD_FPR17(\thread)
95  ldc1 $f19, THREAD_FPR19(\thread)
96  ldc1 $f21, THREAD_FPR21(\thread)
97  ldc1 $f23, THREAD_FPR23(\thread)
98  ldc1 $f25, THREAD_FPR25(\thread)
99  ldc1 $f27, THREAD_FPR27(\thread)
100  ldc1 $f29, THREAD_FPR29(\thread)
101  ldc1 $f31, THREAD_FPR31(\thread)
102  .endm
103 
104  .macro fpu_restore_double thread status tmp
105  sll \tmp, \status, 5
106  bgez \tmp, 1f # 16 register mode?
107 
108  fpu_restore_16odd \thread
109 1: fpu_restore_16even \thread \tmp
110  .endm
111 
112  .macro cpu_save_nonscratch thread
123  .endm
124 
125  .macro cpu_restore_nonscratch thread
136  LONG_L ra, THREAD_REG31(\thread)
137  .endm
138 
139 #endif /* _ASM_ASMMACRO_64_H */