summaryrefslogtreecommitdiff
path: root/gcc/target-globals.h
blob: 4e1a94807777bb5c2d4bb0700acc24bcc442537c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
/* Target-dependent globals.
   Copyright (C) 2010-2014 Free Software Foundation, Inc.

This file is part of GCC.

GCC is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free
Software Foundation; either version 3, or (at your option) any later
version.

GCC is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
for more details.

You should have received a copy of the GNU General Public License
along with GCC; see the file COPYING3.  If not see
<http://www.gnu.org/licenses/>.  */

#ifndef TARGET_GLOBALS_H
#define TARGET_GLOBALS_H 1

#if SWITCHABLE_TARGET
extern struct target_flag_state *this_target_flag_state;
extern struct target_regs *this_target_regs;
extern struct target_rtl *this_target_rtl;
extern struct target_recog *this_target_recog;
extern struct target_hard_regs *this_target_hard_regs;
extern struct target_reload *this_target_reload;
extern struct target_expmed *this_target_expmed;
extern struct target_optabs *this_target_optabs;
extern struct target_libfuncs *this_target_libfuncs;
extern struct target_cfgloop *this_target_cfgloop;
extern struct target_ira *this_target_ira;
extern struct target_ira_int *this_target_ira_int;
extern struct target_builtins *this_target_builtins;
extern struct target_gcse *this_target_gcse;
extern struct target_bb_reorder *this_target_bb_reorder;
extern struct target_lower_subreg *this_target_lower_subreg;
#endif

struct GTY(()) target_globals {
  struct target_flag_state *GTY((skip)) flag_state;
  void *GTY((atomic)) regs;
  struct target_rtl *rtl;
  void *GTY((atomic)) recog;
  void *GTY((atomic)) hard_regs;
  void *GTY((atomic)) reload;
  void *GTY((atomic)) expmed;
  struct target_optabs *GTY((skip)) optabs;
  struct target_libfuncs *libfuncs;
  struct target_cfgloop *GTY((skip)) cfgloop;
  void *GTY((atomic)) ira;
  void *GTY((atomic)) ira_int;
  struct target_builtins *GTY((skip)) builtins;
  struct target_gcse *GTY((skip)) gcse;
  struct target_bb_reorder *GTY((skip)) bb_reorder;
  struct target_lower_subreg *GTY((skip)) lower_subreg;
};

#if SWITCHABLE_TARGET
extern struct target_globals default_target_globals;

extern struct target_globals *save_target_globals (void);
extern struct target_globals *save_target_globals_default_opts (void);

static inline void
restore_target_globals (struct target_globals *g)
{
  this_target_flag_state = g->flag_state;
  this_target_regs = (struct target_regs *) g->regs;
  this_target_rtl = g->rtl;
  this_target_recog = (struct target_recog *) g->recog;
  this_target_hard_regs = (struct target_hard_regs *) g->hard_regs;
  this_target_reload = (struct target_reload *) g->reload;
  this_target_expmed = (struct target_expmed *) g->expmed;
  this_target_optabs = g->optabs;
  this_target_libfuncs = g->libfuncs;
  this_target_cfgloop = g->cfgloop;
  this_target_ira = (struct target_ira *) g->ira;
  this_target_ira_int = (struct target_ira_int *) g->ira_int;
  this_target_builtins = g->builtins;
  this_target_gcse = g->gcse;
  this_target_bb_reorder = g->bb_reorder;
  this_target_lower_subreg = g->lower_subreg;
}
#endif

#endif