aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/loongarch/loongarch-driver.h
blob: 2e4a7a9c87067ae6bf675186598060c563ff8145 (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
/* Subroutine headers for the gcc driver.
   Copyright (C) 2021-2022 Free Software Foundation, Inc.
   Contributed by Loongson Ltd.

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 LOONGARCH_DRIVER_H
#define LOONGARCH_DRIVER_H

#include "loongarch-str.h"

extern const char*
driver_set_m_flag (int argc, const char **argv);

extern const char*
driver_get_normalized_m_opts (int argc, const char **argv);

#define EXTRA_SPEC_FUNCTIONS \
  { "set_m_flag", driver_set_m_flag  }, \
  { "get_normalized_m_opts", driver_get_normalized_m_opts  },

/* Pre-process ABI-related options.  */
#define LA_SET_PARM_SPEC(NAME) \
  " %{m" OPTSTR_##NAME  "=*: %:set_m_flag(" OPTSTR_##NAME "=%*)}" \

#define LA_SET_FLAG_SPEC(NAME) \
  " %{m" OPTSTR_##NAME  ": %:set_m_flag(" OPTSTR_##NAME ")}" \

#define DRIVER_HANDLE_MACHINE_OPTIONS			      \
  " %{c|S|E|nostdlib: %:set_m_flag(no_link)}"		      \
  " %{nostartfiles: %{nodefaultlibs: %:set_m_flag(no_link)}}" \
  LA_SET_PARM_SPEC (ABI_BASE)				      \
  LA_SET_PARM_SPEC (ARCH)				      \
  LA_SET_PARM_SPEC (TUNE)				      \
  LA_SET_PARM_SPEC (ISA_EXT_FPU)			      \
  LA_SET_PARM_SPEC (CMODEL)				      \
  LA_SET_FLAG_SPEC (SOFT_FLOAT)				      \
  LA_SET_FLAG_SPEC (SINGLE_FLOAT)			      \
  LA_SET_FLAG_SPEC (DOUBLE_FLOAT)			      \
  " %:get_normalized_m_opts()"

#define DRIVER_SELF_SPECS \
  DRIVER_HANDLE_MACHINE_OPTIONS

/* ABI spec strings.  */
#define ABI_GRLEN_SPEC \
  "%{mabi=lp64*:64}"   \

#define ABI_SPEC \
  "%{mabi=lp64d:lp64d}" \
  "%{mabi=lp64f:lp64f}" \
  "%{mabi=lp64s:lp64s}" \

#endif /* LOONGARCH_DRIVER_H */