source: rtems/cpukit/score/cpu/arm/arm-context-volatile-clobber.S @ 2afb22b

5
Last change on this file since 2afb22b was b437a360, checked in by Sebastian Huber <sebastian.huber@…>, on 03/09/17 at 13:32:04

arm: Fix CPU context validation for Cortex-R4

Do not touch the FPSCR[QC] bit since this is DNM/RAZ on Cortex-R4.

  • Property mode set to 100644
File size: 1.6 KB
Line 
1/*
2 * Copyright (c) 2013, 2017 embedded brains GmbH.  All rights reserved.
3 *
4 *  embedded brains GmbH
5 *  Dornierstr. 4
6 *  82178 Puchheim
7 *  Germany
8 *  <rtems@embedded-brains.de>
9 *
10 * The license and distribution terms for this file may be
11 * found in the file LICENSE in this distribution or at
12 * http://www.rtems.org/license/LICENSE.
13 */
14
15#ifdef HAVE_CONFIG_H
16  #include "config.h"
17#endif
18
19#include <rtems/asm.h>
20
21        .section        .text
22
23#ifdef __thumb__
24FUNCTION_THUMB_ENTRY(_CPU_Context_volatile_clobber)
25#else
26FUNCTION_ENTRY(_CPU_Context_volatile_clobber)
27#endif
28
29.macro clobber_register reg
30        sub     r0, r0, #1
31        mov     \reg, r0
32.endm
33
34#ifdef ARM_MULTILIB_VFP
35        vmrs    r1, FPSCR
36        ldr     r2, =0xf000001f
37        bic     r1, r1, r2
38        and     r2, r2, r0
39        orr     r1, r1, r2
40        vmsr    FPSCR, r1
41
42.macro clobber_vfp_register reg
43        sub     r0, r0, #1
44        vmov    \reg, r0, r0
45.endm
46
47        clobber_vfp_register    d0
48        clobber_vfp_register    d1
49        clobber_vfp_register    d2
50        clobber_vfp_register    d3
51        clobber_vfp_register    d4
52        clobber_vfp_register    d5
53        clobber_vfp_register    d6
54        clobber_vfp_register    d7
55#ifdef ARM_MULTILIB_VFP_D32
56        clobber_vfp_register    d16
57        clobber_vfp_register    d17
58        clobber_vfp_register    d18
59        clobber_vfp_register    d19
60        clobber_vfp_register    d20
61        clobber_vfp_register    d21
62        clobber_vfp_register    d22
63        clobber_vfp_register    d23
64        clobber_vfp_register    d24
65        clobber_vfp_register    d25
66        clobber_vfp_register    d26
67        clobber_vfp_register    d27
68        clobber_vfp_register    d28
69        clobber_vfp_register    d29
70        clobber_vfp_register    d30
71        clobber_vfp_register    d31
72#endif /* ARM_MULTILIB_VFP_D32 */
73#endif /* ARM_MULTILIB_VFP */
74
75        clobber_register        r1
76        clobber_register        r2
77        clobber_register        r3
78        clobber_register        r12
79
80        bx      lr
81
82FUNCTION_END(_CPU_Context_volatile_clobber)
Note: See TracBrowser for help on using the repository browser.