value-unwind.h revision 1.1.1.5
1/* Store register values as _Unwind_Word type in DWARF2 EH unwind context.
2   Copyright (C) 2017-2019 Free Software Foundation, Inc.
3
4   This file is part of GCC.
5
6   GCC is free software; you can redistribute it and/or modify it
7   under the terms of the GNU General Public License as published
8   by the Free Software Foundation; either version 3, or (at your
9   option) any later version.
10
11   GCC is distributed in the hope that it will be useful, but WITHOUT
12   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
14   License for more details.
15
16   You should have received a copy of the GNU General Public License and
17   a copy of the GCC Runtime Library Exception along with this program;
18   see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
19   <http://www.gnu.org/licenses/>.  */
20
21/* Define this macro if the target stores register values as _Unwind_Word
22   type in unwind context.  Only enable it for ilp32.  */
23#if defined __aarch64__ && !defined __LP64__
24# define REG_VALUE_IN_UNWIND_CONTEXT
25#endif
26
27/* Return the value of the pseudo VG register.  This should only be
28   called if we know this is an SVE host.  */
29static inline int
30aarch64_vg (void)
31{
32  register int vg asm ("x0");
33  /* CNTD X0.  */
34  asm (".inst 0x04e0e3e0" : "=r" (vg));
35  return vg;
36}
37
38/* Lazily provide a value for VG, so that we don't try to execute SVE
39   instructions unless we know they're needed.  */
40#define DWARF_LAZY_REGISTER_VALUE(REGNO, VALUE) \
41  ((REGNO) == AARCH64_DWARF_VG && ((*VALUE) = aarch64_vg (), 1))
42