1 /* 2 * asmmacro.h: Assembler macros to make things easier to read. 3 * 4 * Copyright (C) 1996 David S. Miller (davem@davemloft.net) 5 * Copyright (C) 1998, 1999, 2003 Ralf Baechle 6 */ 7 #ifndef _ASM_ASMMACRO_32_H 8 #define _ASM_ASMMACRO_32_H 9 10 #include <asm/asm-offsets.h> 11 #include <asm/regdef.h> 12 #include <asm/fpregdef.h> 13 #include <asm/mipsregs.h> 14 15 .macro fpu_save_single thread tmp=t0 16 cfc1 \tmp, fcr31 17 swc1 $f0, THREAD_FPR0_LS64(\thread) 18 swc1 $f1, THREAD_FPR1_LS64(\thread) 19 swc1 $f2, THREAD_FPR2_LS64(\thread) 20 swc1 $f3, THREAD_FPR3_LS64(\thread) 21 swc1 $f4, THREAD_FPR4_LS64(\thread) 22 swc1 $f5, THREAD_FPR5_LS64(\thread) 23 swc1 $f6, THREAD_FPR6_LS64(\thread) 24 swc1 $f7, THREAD_FPR7_LS64(\thread) 25 swc1 $f8, THREAD_FPR8_LS64(\thread) 26 swc1 $f9, THREAD_FPR9_LS64(\thread) 27 swc1 $f10, THREAD_FPR10_LS64(\thread) 28 swc1 $f11, THREAD_FPR11_LS64(\thread) 29 swc1 $f12, THREAD_FPR12_LS64(\thread) 30 swc1 $f13, THREAD_FPR13_LS64(\thread) 31 swc1 $f14, THREAD_FPR14_LS64(\thread) 32 swc1 $f15, THREAD_FPR15_LS64(\thread) 33 swc1 $f16, THREAD_FPR16_LS64(\thread) 34 swc1 $f17, THREAD_FPR17_LS64(\thread) 35 swc1 $f18, THREAD_FPR18_LS64(\thread) 36 swc1 $f19, THREAD_FPR19_LS64(\thread) 37 swc1 $f20, THREAD_FPR20_LS64(\thread) 38 swc1 $f21, THREAD_FPR21_LS64(\thread) 39 swc1 $f22, THREAD_FPR22_LS64(\thread) 40 swc1 $f23, THREAD_FPR23_LS64(\thread) 41 swc1 $f24, THREAD_FPR24_LS64(\thread) 42 swc1 $f25, THREAD_FPR25_LS64(\thread) 43 swc1 $f26, THREAD_FPR26_LS64(\thread) 44 swc1 $f27, THREAD_FPR27_LS64(\thread) 45 swc1 $f28, THREAD_FPR28_LS64(\thread) 46 swc1 $f29, THREAD_FPR29_LS64(\thread) 47 swc1 $f30, THREAD_FPR30_LS64(\thread) 48 swc1 $f31, THREAD_FPR31_LS64(\thread) 49 sw \tmp, THREAD_FCR31(\thread) 50 .endm 51 52 .macro fpu_restore_single thread tmp=t0 53 lw \tmp, THREAD_FCR31(\thread) 54 lwc1 $f0, THREAD_FPR0_LS64(\thread) 55 lwc1 $f1, THREAD_FPR1_LS64(\thread) 56 lwc1 $f2, THREAD_FPR2_LS64(\thread) 57 lwc1 $f3, THREAD_FPR3_LS64(\thread) 58 lwc1 $f4, THREAD_FPR4_LS64(\thread) 59 lwc1 $f5, THREAD_FPR5_LS64(\thread) 60 lwc1 $f6, THREAD_FPR6_LS64(\thread) 61 lwc1 $f7, THREAD_FPR7_LS64(\thread) 62 lwc1 $f8, THREAD_FPR8_LS64(\thread) 63 lwc1 $f9, THREAD_FPR9_LS64(\thread) 64 lwc1 $f10, THREAD_FPR10_LS64(\thread) 65 lwc1 $f11, THREAD_FPR11_LS64(\thread) 66 lwc1 $f12, THREAD_FPR12_LS64(\thread) 67 lwc1 $f13, THREAD_FPR13_LS64(\thread) 68 lwc1 $f14, THREAD_FPR14_LS64(\thread) 69 lwc1 $f15, THREAD_FPR15_LS64(\thread) 70 lwc1 $f16, THREAD_FPR16_LS64(\thread) 71 lwc1 $f17, THREAD_FPR17_LS64(\thread) 72 lwc1 $f18, THREAD_FPR18_LS64(\thread) 73 lwc1 $f19, THREAD_FPR19_LS64(\thread) 74 lwc1 $f20, THREAD_FPR20_LS64(\thread) 75 lwc1 $f21, THREAD_FPR21_LS64(\thread) 76 lwc1 $f22, THREAD_FPR22_LS64(\thread) 77 lwc1 $f23, THREAD_FPR23_LS64(\thread) 78 lwc1 $f24, THREAD_FPR24_LS64(\thread) 79 lwc1 $f25, THREAD_FPR25_LS64(\thread) 80 lwc1 $f26, THREAD_FPR26_LS64(\thread) 81 lwc1 $f27, THREAD_FPR27_LS64(\thread) 82 lwc1 $f28, THREAD_FPR28_LS64(\thread) 83 lwc1 $f29, THREAD_FPR29_LS64(\thread) 84 lwc1 $f30, THREAD_FPR30_LS64(\thread) 85 lwc1 $f31, THREAD_FPR31_LS64(\thread) 86 ctc1 \tmp, fcr31 87 .endm 88 89 .macro cpu_save_nonscratch thread 90 LONG_S s0, THREAD_REG16(\thread) 91 LONG_S s1, THREAD_REG17(\thread) 92 LONG_S s2, THREAD_REG18(\thread) 93 LONG_S s3, THREAD_REG19(\thread) 94 LONG_S s4, THREAD_REG20(\thread) 95 LONG_S s5, THREAD_REG21(\thread) 96 LONG_S s6, THREAD_REG22(\thread) 97 LONG_S s7, THREAD_REG23(\thread) 98 LONG_S sp, THREAD_REG29(\thread) 99 LONG_S fp, THREAD_REG30(\thread) 100 .endm 101 102 .macro cpu_restore_nonscratch thread 103 LONG_L s0, THREAD_REG16(\thread) 104 LONG_L s1, THREAD_REG17(\thread) 105 LONG_L s2, THREAD_REG18(\thread) 106 LONG_L s3, THREAD_REG19(\thread) 107 LONG_L s4, THREAD_REG20(\thread) 108 LONG_L s5, THREAD_REG21(\thread) 109 LONG_L s6, THREAD_REG22(\thread) 110 LONG_L s7, THREAD_REG23(\thread) 111 LONG_L sp, THREAD_REG29(\thread) 112 LONG_L fp, THREAD_REG30(\thread) 113 LONG_L ra, THREAD_REG31(\thread) 114 .endm 115 116 #endif /* _ASM_ASMMACRO_32_H */ 117