linux/arch/mips/include/asm/asmmacro-32.h
<<
>>
Prefs
   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_double thread status tmp1=t0
  16        cfc1    \tmp1,  fcr31
  17        sdc1    $f0,  THREAD_FPR0(\thread)
  18        sdc1    $f2,  THREAD_FPR2(\thread)
  19        sdc1    $f4,  THREAD_FPR4(\thread)
  20        sdc1    $f6,  THREAD_FPR6(\thread)
  21        sdc1    $f8,  THREAD_FPR8(\thread)
  22        sdc1    $f10, THREAD_FPR10(\thread)
  23        sdc1    $f12, THREAD_FPR12(\thread)
  24        sdc1    $f14, THREAD_FPR14(\thread)
  25        sdc1    $f16, THREAD_FPR16(\thread)
  26        sdc1    $f18, THREAD_FPR18(\thread)
  27        sdc1    $f20, THREAD_FPR20(\thread)
  28        sdc1    $f22, THREAD_FPR22(\thread)
  29        sdc1    $f24, THREAD_FPR24(\thread)
  30        sdc1    $f26, THREAD_FPR26(\thread)
  31        sdc1    $f28, THREAD_FPR28(\thread)
  32        sdc1    $f30, THREAD_FPR30(\thread)
  33        sw      \tmp1, THREAD_FCR31(\thread)
  34        .endm
  35
  36        .macro  fpu_save_single thread tmp=t0
  37        cfc1    \tmp,  fcr31
  38        swc1    $f0,  THREAD_FPR0(\thread)
  39        swc1    $f1,  THREAD_FPR1(\thread)
  40        swc1    $f2,  THREAD_FPR2(\thread)
  41        swc1    $f3,  THREAD_FPR3(\thread)
  42        swc1    $f4,  THREAD_FPR4(\thread)
  43        swc1    $f5,  THREAD_FPR5(\thread)
  44        swc1    $f6,  THREAD_FPR6(\thread)
  45        swc1    $f7,  THREAD_FPR7(\thread)
  46        swc1    $f8,  THREAD_FPR8(\thread)
  47        swc1    $f9,  THREAD_FPR9(\thread)
  48        swc1    $f10, THREAD_FPR10(\thread)
  49        swc1    $f11, THREAD_FPR11(\thread)
  50        swc1    $f12, THREAD_FPR12(\thread)
  51        swc1    $f13, THREAD_FPR13(\thread)
  52        swc1    $f14, THREAD_FPR14(\thread)
  53        swc1    $f15, THREAD_FPR15(\thread)
  54        swc1    $f16, THREAD_FPR16(\thread)
  55        swc1    $f17, THREAD_FPR17(\thread)
  56        swc1    $f18, THREAD_FPR18(\thread)
  57        swc1    $f19, THREAD_FPR19(\thread)
  58        swc1    $f20, THREAD_FPR20(\thread)
  59        swc1    $f21, THREAD_FPR21(\thread)
  60        swc1    $f22, THREAD_FPR22(\thread)
  61        swc1    $f23, THREAD_FPR23(\thread)
  62        swc1    $f24, THREAD_FPR24(\thread)
  63        swc1    $f25, THREAD_FPR25(\thread)
  64        swc1    $f26, THREAD_FPR26(\thread)
  65        swc1    $f27, THREAD_FPR27(\thread)
  66        swc1    $f28, THREAD_FPR28(\thread)
  67        swc1    $f29, THREAD_FPR29(\thread)
  68        swc1    $f30, THREAD_FPR30(\thread)
  69        swc1    $f31, THREAD_FPR31(\thread)
  70        sw      \tmp, THREAD_FCR31(\thread)
  71        .endm
  72
  73        .macro  fpu_restore_double thread status tmp=t0
  74        lw      \tmp, THREAD_FCR31(\thread)
  75        ldc1    $f0,  THREAD_FPR0(\thread)
  76        ldc1    $f2,  THREAD_FPR2(\thread)
  77        ldc1    $f4,  THREAD_FPR4(\thread)
  78        ldc1    $f6,  THREAD_FPR6(\thread)
  79        ldc1    $f8,  THREAD_FPR8(\thread)
  80        ldc1    $f10, THREAD_FPR10(\thread)
  81        ldc1    $f12, THREAD_FPR12(\thread)
  82        ldc1    $f14, THREAD_FPR14(\thread)
  83        ldc1    $f16, THREAD_FPR16(\thread)
  84        ldc1    $f18, THREAD_FPR18(\thread)
  85        ldc1    $f20, THREAD_FPR20(\thread)
  86        ldc1    $f22, THREAD_FPR22(\thread)
  87        ldc1    $f24, THREAD_FPR24(\thread)
  88        ldc1    $f26, THREAD_FPR26(\thread)
  89        ldc1    $f28, THREAD_FPR28(\thread)
  90        ldc1    $f30, THREAD_FPR30(\thread)
  91        ctc1    \tmp, fcr31
  92        .endm
  93
  94        .macro  fpu_restore_single thread tmp=t0
  95        lw      \tmp, THREAD_FCR31(\thread)
  96        lwc1    $f0,  THREAD_FPR0(\thread)
  97        lwc1    $f1,  THREAD_FPR1(\thread)
  98        lwc1    $f2,  THREAD_FPR2(\thread)
  99        lwc1    $f3,  THREAD_FPR3(\thread)
 100        lwc1    $f4,  THREAD_FPR4(\thread)
 101        lwc1    $f5,  THREAD_FPR5(\thread)
 102        lwc1    $f6,  THREAD_FPR6(\thread)
 103        lwc1    $f7,  THREAD_FPR7(\thread)
 104        lwc1    $f8,  THREAD_FPR8(\thread)
 105        lwc1    $f9,  THREAD_FPR9(\thread)
 106        lwc1    $f10, THREAD_FPR10(\thread)
 107        lwc1    $f11, THREAD_FPR11(\thread)
 108        lwc1    $f12, THREAD_FPR12(\thread)
 109        lwc1    $f13, THREAD_FPR13(\thread)
 110        lwc1    $f14, THREAD_FPR14(\thread)
 111        lwc1    $f15, THREAD_FPR15(\thread)
 112        lwc1    $f16, THREAD_FPR16(\thread)
 113        lwc1    $f17, THREAD_FPR17(\thread)
 114        lwc1    $f18, THREAD_FPR18(\thread)
 115        lwc1    $f19, THREAD_FPR19(\thread)
 116        lwc1    $f20, THREAD_FPR20(\thread)
 117        lwc1    $f21, THREAD_FPR21(\thread)
 118        lwc1    $f22, THREAD_FPR22(\thread)
 119        lwc1    $f23, THREAD_FPR23(\thread)
 120        lwc1    $f24, THREAD_FPR24(\thread)
 121        lwc1    $f25, THREAD_FPR25(\thread)
 122        lwc1    $f26, THREAD_FPR26(\thread)
 123        lwc1    $f27, THREAD_FPR27(\thread)
 124        lwc1    $f28, THREAD_FPR28(\thread)
 125        lwc1    $f29, THREAD_FPR29(\thread)
 126        lwc1    $f30, THREAD_FPR30(\thread)
 127        lwc1    $f31, THREAD_FPR31(\thread)
 128        ctc1    \tmp, fcr31
 129        .endm
 130
 131        .macro  cpu_save_nonscratch thread
 132        LONG_S  s0, THREAD_REG16(\thread)
 133        LONG_S  s1, THREAD_REG17(\thread)
 134        LONG_S  s2, THREAD_REG18(\thread)
 135        LONG_S  s3, THREAD_REG19(\thread)
 136        LONG_S  s4, THREAD_REG20(\thread)
 137        LONG_S  s5, THREAD_REG21(\thread)
 138        LONG_S  s6, THREAD_REG22(\thread)
 139        LONG_S  s7, THREAD_REG23(\thread)
 140        LONG_S  sp, THREAD_REG29(\thread)
 141        LONG_S  fp, THREAD_REG30(\thread)
 142        .endm
 143
 144        .macro  cpu_restore_nonscratch thread
 145        LONG_L  s0, THREAD_REG16(\thread)
 146        LONG_L  s1, THREAD_REG17(\thread)
 147        LONG_L  s2, THREAD_REG18(\thread)
 148        LONG_L  s3, THREAD_REG19(\thread)
 149        LONG_L  s4, THREAD_REG20(\thread)
 150        LONG_L  s5, THREAD_REG21(\thread)
 151        LONG_L  s6, THREAD_REG22(\thread)
 152        LONG_L  s7, THREAD_REG23(\thread)
 153        LONG_L  sp, THREAD_REG29(\thread)
 154        LONG_L  fp, THREAD_REG30(\thread)
 155        LONG_L  ra, THREAD_REG31(\thread)
 156        .endm
 157
 158#endif /* _ASM_ASMMACRO_32_H */
 159