master
h 43 lines 944 Bytes
Raw
1 /*
2 * FreeBSD arm64 register structures
3 *
4 * Copyright (c) 2015 Stacey D. Son
5 *
6 * SPDX-License-Identifier: GPL-2.0-or-later
7 */
8 #ifndef TARGET_ARCH_REG_H
9 #define TARGET_ARCH_REG_H
10
11 /* See sys/arm64/include/reg.h */
12 typedef struct target_reg {
13 uint64_t x[30];
14 uint64_t lr;
15 uint64_t sp;
16 uint64_t elr;
17 uint64_t spsr;
18 } target_reg_t;
19
20 typedef struct target_fpreg {
21 Int128 fp_q[32];
22 uint32_t fp_sr;
23 uint32_t fp_cr;
24 } target_fpreg_t;
25
26 #define tswapreg(ptr) tswapal(ptr)
27
28 static inline void target_copy_regs(target_reg_t *regs, CPUARMState *env)
29 {
30 int i;
31
32 for (i = 0; i < 30; i++) {
33 regs->x[i] = tswapreg(env->xregs[i]);
34 }
35 regs->lr = tswapreg(env->xregs[30]);
36 regs->sp = tswapreg(env->xregs[31]);
37 regs->elr = tswapreg(env->pc);
38 regs->spsr = tswapreg(pstate_read(env));
39 }
40
41 #undef tswapreg
42
43 #endif /* TARGET_ARCH_REG_H */