summaryrefslogtreecommitdiff
path: root/gcc/config/arc/driver-arc.c
blob: 08135f6645295c8151e1c1133f45cf421ff6ed00 (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
/* Subroutines for the gcc driver.
   Copyright (C) 2016-2020 Free Software Foundation, Inc.
   Contributed by Claudiu Zissulescu <claziss@synopsys.com>

   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/>.  */

#define IN_TARGET_CODE 1

#include "config.h"
#include "system.h"
#include "coretypes.h"
#include "tm.h"

/* Returns command line parameters to pass to as.  */

const char*
arc_cpu_to_as (int argc, const char **argv)
{
  const char *name = NULL;
  const arc_cpu_t *arc_selected_cpu;

  /* No argument, check what is the default cpu.  */
  if (argc == 0)
    {
      arc_selected_cpu = &arc_cpu_types[(int) TARGET_CPU_DEFAULT];
    }
  else
    {
      name = argv[0];
      for (arc_selected_cpu = arc_cpu_types; arc_selected_cpu->name;
	   arc_selected_cpu++)
	{
	  if (strcmp (arc_selected_cpu->name, name) == 0)
	    break;
	}
    }

  switch (arc_selected_cpu->arch_info->arch_id)
    {
    case BASE_ARCH_em:
      if (arc_selected_cpu->flags & FL_CD)
	name = "-mcode-density";
      else
	name = "";
      if (arc_selected_cpu->flags & FL_FPUDA)
	name = concat ("-mfpuda ", name, NULL);
      if (arc_selected_cpu->flags & FL_SPFP)
	name = concat ("-mspfp ", name, NULL);
      if (arc_selected_cpu->flags & FL_DPFP)
	name = concat ("-mdpfp ", name, NULL);
      return concat ("-mcpu=arcem ", name, NULL);
    case BASE_ARCH_hs:
      return "-mcpu=archs";
    case BASE_ARCH_700:
      if (arc_selected_cpu->processor == PROCESSOR_nps400)
	return "-mcpu=nps400 -mEA";
      else
	return "-mcpu=arc700 -mEA";
    case BASE_ARCH_6xx:
      if (arc_selected_cpu->flags & FL_MUL64)
	return "-mcpu=arc600 -mmul64 -mnorm";
      if (arc_selected_cpu->flags & FL_MUL32x16)
	return "-mcpu=arc600 -mdsp-packa -mnorm";
      return "-mcpu=arc600 -mnorm";
    default:
      gcc_unreachable ();
    }
  return NULL;
}