Zephyr API Documentation  2.7.0-rc2
A Scalable Open Source RTOS
float_regs_arm64_gcc.h
Go to the documentation of this file.
1
6/*
7 * Copyright (c) 2021 BayLibre SAS
8 *
9 * SPDX-License-Identifier: Apache-2.0
10 */
11
12#ifndef _FLOAT_REGS_ARM64_GCC_H
13#define _FLOAT_REGS_ARM64_GCC_H
14
15#include <toolchain.h>
16#include "float_context.h"
17
35static inline void _load_all_float_registers(struct fp_register_set *regs)
36{
37 __asm__ volatile (
38 "ldp q0, q1, [x0, #(16 * 0)]\n\t"
39 "ldp q2, q3, [x0, #(16 * 2)]\n\t"
40 "ldp q4, q5, [x0, #(16 * 4)]\n\t"
41 "ldp q6, q7, [x0, #(16 * 6)]\n\t"
42 "ldp q8, q9, [x0, #(16 * 8)]\n\t"
43 "ldp q10, q11, [x0, #(16 * 10)]\n\t"
44 "ldp q12, q13, [x0, #(16 * 12)]\n\t"
45 "ldp q14, q15, [x0, #(16 * 14)]\n\t"
46 "ldp q16, q17, [x0, #(16 * 16)]\n\t"
47 "ldp q18, q19, [x0, #(16 * 18)]\n\t"
48 "ldp q20, q21, [x0, #(16 * 20)]\n\t"
49 "ldp q22, q23, [x0, #(16 * 22)]\n\t"
50 "ldp q24, q25, [x0, #(16 * 24)]\n\t"
51 "ldp q26, q27, [x0, #(16 * 26)]\n\t"
52 "ldp q28, q29, [x0, #(16 * 28)]\n\t"
53 "ldp q30, q31, [x0, #(16 * 30)]"
54 :
55 : "r" (regs)
56 );
57}
58
71static inline void _store_all_float_registers(struct fp_register_set *regs)
72{
73 __asm__ volatile (
74 "stp q0, q1, [x0, #(16 * 0)]\n\t"
75 "stp q2, q3, [x0, #(16 * 2)]\n\t"
76 "stp q4, q5, [x0, #(16 * 4)]\n\t"
77 "stp q6, q7, [x0, #(16 * 6)]\n\t"
78 "stp q8, q9, [x0, #(16 * 8)]\n\t"
79 "stp q10, q11, [x0, #(16 * 10)]\n\t"
80 "stp q12, q13, [x0, #(16 * 12)]\n\t"
81 "stp q14, q15, [x0, #(16 * 14)]\n\t"
82 "stp q16, q17, [x0, #(16 * 16)]\n\t"
83 "stp q18, q19, [x0, #(16 * 18)]\n\t"
84 "stp q20, q21, [x0, #(16 * 20)]\n\t"
85 "stp q22, q23, [x0, #(16 * 22)]\n\t"
86 "stp q24, q25, [x0, #(16 * 24)]\n\t"
87 "stp q26, q27, [x0, #(16 * 26)]\n\t"
88 "stp q28, q29, [x0, #(16 * 28)]\n\t"
89 "stp q30, q31, [x0, #(16 * 30)]"
90 :
91 : "r" (regs)
92 : "memory"
93 );
94}
95
110static inline void _load_then_store_all_float_registers(
111 struct fp_register_set *regs)
112{
113 _load_all_float_registers(regs);
114 _store_all_float_registers(regs);
115}
116#endif /* _FLOAT_REGS_ARM64_GCC_H */
common definitions for the FPU sharing test application
Definition: float_context.h:164
Macros to abstract toolchain specific capabilities.