~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/arm64/include/asm/fpsimdmacros.h

Version: ~ [ linux-5.12-rc1 ] ~ [ linux-5.11.2 ] ~ [ linux-5.10.19 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.101 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.177 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.222 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.258 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.258 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.52 ] ~ [ linux-4.0.9 ] ~ [ linux-3.18.140 ] ~ [ linux-3.16.85 ] ~ [ linux-3.14.79 ] ~ [ linux-3.12.74 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.5 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /*
  2  * FP/SIMD state saving and restoring macros
  3  *
  4  * Copyright (C) 2012 ARM Ltd.
  5  * Author: Catalin Marinas <catalin.marinas@arm.com>
  6  *
  7  * This program is free software; you can redistribute it and/or modify
  8  * it under the terms of the GNU General Public License version 2 as
  9  * published by the Free Software Foundation.
 10  *
 11  * This program is distributed in the hope that it will be useful,
 12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 14  * GNU General Public License for more details.
 15  *
 16  * You should have received a copy of the GNU General Public License
 17  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 18  */
 19 
 20 .macro fpsimd_save state, tmpnr
 21         stp     q0, q1, [\state, #16 * 0]
 22         stp     q2, q3, [\state, #16 * 2]
 23         stp     q4, q5, [\state, #16 * 4]
 24         stp     q6, q7, [\state, #16 * 6]
 25         stp     q8, q9, [\state, #16 * 8]
 26         stp     q10, q11, [\state, #16 * 10]
 27         stp     q12, q13, [\state, #16 * 12]
 28         stp     q14, q15, [\state, #16 * 14]
 29         stp     q16, q17, [\state, #16 * 16]
 30         stp     q18, q19, [\state, #16 * 18]
 31         stp     q20, q21, [\state, #16 * 20]
 32         stp     q22, q23, [\state, #16 * 22]
 33         stp     q24, q25, [\state, #16 * 24]
 34         stp     q26, q27, [\state, #16 * 26]
 35         stp     q28, q29, [\state, #16 * 28]
 36         stp     q30, q31, [\state, #16 * 30]!
 37         mrs     x\tmpnr, fpsr
 38         str     w\tmpnr, [\state, #16 * 2]
 39         mrs     x\tmpnr, fpcr
 40         str     w\tmpnr, [\state, #16 * 2 + 4]
 41 .endm
 42 
 43 .macro fpsimd_restore_fpcr state, tmp
 44         /*
 45          * Writes to fpcr may be self-synchronising, so avoid restoring
 46          * the register if it hasn't changed.
 47          */
 48         mrs     \tmp, fpcr
 49         cmp     \tmp, \state
 50         b.eq    9999f
 51         msr     fpcr, \state
 52 9999:
 53 .endm
 54 
 55 /* Clobbers \state */
 56 .macro fpsimd_restore state, tmpnr
 57         ldp     q0, q1, [\state, #16 * 0]
 58         ldp     q2, q3, [\state, #16 * 2]
 59         ldp     q4, q5, [\state, #16 * 4]
 60         ldp     q6, q7, [\state, #16 * 6]
 61         ldp     q8, q9, [\state, #16 * 8]
 62         ldp     q10, q11, [\state, #16 * 10]
 63         ldp     q12, q13, [\state, #16 * 12]
 64         ldp     q14, q15, [\state, #16 * 14]
 65         ldp     q16, q17, [\state, #16 * 16]
 66         ldp     q18, q19, [\state, #16 * 18]
 67         ldp     q20, q21, [\state, #16 * 20]
 68         ldp     q22, q23, [\state, #16 * 22]
 69         ldp     q24, q25, [\state, #16 * 24]
 70         ldp     q26, q27, [\state, #16 * 26]
 71         ldp     q28, q29, [\state, #16 * 28]
 72         ldp     q30, q31, [\state, #16 * 30]!
 73         ldr     w\tmpnr, [\state, #16 * 2]
 74         msr     fpsr, x\tmpnr
 75         ldr     w\tmpnr, [\state, #16 * 2 + 4]
 76         fpsimd_restore_fpcr x\tmpnr, \state
 77 .endm
 78 
 79 .macro fpsimd_save_partial state, numnr, tmpnr1, tmpnr2
 80         mrs     x\tmpnr1, fpsr
 81         str     w\numnr, [\state, #8]
 82         mrs     x\tmpnr2, fpcr
 83         stp     w\tmpnr1, w\tmpnr2, [\state]
 84         adr     x\tmpnr1, 0f
 85         add     \state, \state, x\numnr, lsl #4
 86         sub     x\tmpnr1, x\tmpnr1, x\numnr, lsl #1
 87         br      x\tmpnr1
 88         stp     q30, q31, [\state, #-16 * 30 - 16]
 89         stp     q28, q29, [\state, #-16 * 28 - 16]
 90         stp     q26, q27, [\state, #-16 * 26 - 16]
 91         stp     q24, q25, [\state, #-16 * 24 - 16]
 92         stp     q22, q23, [\state, #-16 * 22 - 16]
 93         stp     q20, q21, [\state, #-16 * 20 - 16]
 94         stp     q18, q19, [\state, #-16 * 18 - 16]
 95         stp     q16, q17, [\state, #-16 * 16 - 16]
 96         stp     q14, q15, [\state, #-16 * 14 - 16]
 97         stp     q12, q13, [\state, #-16 * 12 - 16]
 98         stp     q10, q11, [\state, #-16 * 10 - 16]
 99         stp     q8, q9, [\state, #-16 * 8 - 16]
100         stp     q6, q7, [\state, #-16 * 6 - 16]
101         stp     q4, q5, [\state, #-16 * 4 - 16]
102         stp     q2, q3, [\state, #-16 * 2 - 16]
103         stp     q0, q1, [\state, #-16 * 0 - 16]
104 0:
105 .endm
106 
107 .macro fpsimd_restore_partial state, tmpnr1, tmpnr2
108         ldp     w\tmpnr1, w\tmpnr2, [\state]
109         msr     fpsr, x\tmpnr1
110         fpsimd_restore_fpcr x\tmpnr2, x\tmpnr1
111         adr     x\tmpnr1, 0f
112         ldr     w\tmpnr2, [\state, #8]
113         add     \state, \state, x\tmpnr2, lsl #4
114         sub     x\tmpnr1, x\tmpnr1, x\tmpnr2, lsl #1
115         br      x\tmpnr1
116         ldp     q30, q31, [\state, #-16 * 30 - 16]
117         ldp     q28, q29, [\state, #-16 * 28 - 16]
118         ldp     q26, q27, [\state, #-16 * 26 - 16]
119         ldp     q24, q25, [\state, #-16 * 24 - 16]
120         ldp     q22, q23, [\state, #-16 * 22 - 16]
121         ldp     q20, q21, [\state, #-16 * 20 - 16]
122         ldp     q18, q19, [\state, #-16 * 18 - 16]
123         ldp     q16, q17, [\state, #-16 * 16 - 16]
124         ldp     q14, q15, [\state, #-16 * 14 - 16]
125         ldp     q12, q13, [\state, #-16 * 12 - 16]
126         ldp     q10, q11, [\state, #-16 * 10 - 16]
127         ldp     q8, q9, [\state, #-16 * 8 - 16]
128         ldp     q6, q7, [\state, #-16 * 6 - 16]
129         ldp     q4, q5, [\state, #-16 * 4 - 16]
130         ldp     q2, q3, [\state, #-16 * 2 - 16]
131         ldp     q0, q1, [\state, #-16 * 0 - 16]
132 0:
133 .endm
134 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

osdn.jp