Home | History | Annotate | Line # | Download | only in sparc
      1 /* Subroutines for the D front end on the SPARC architecture.
      2    Copyright (C) 2017-2024 Free Software Foundation, Inc.
      3 
      4 GCC is free software; you can redistribute it and/or modify
      5 it under the terms of the GNU General Public License as published by
      6 the Free Software Foundation; either version 3, or (at your option)
      7 any later version.
      8 
      9 GCC is distributed in the hope that it will be useful,
     10 but WITHOUT ANY WARRANTY; without even the implied warranty of
     11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     12 GNU General Public License for more details.
     13 
     14 You should have received a copy of the GNU General Public License
     15 along with GCC; see the file COPYING3.  If not see
     16 <http://www.gnu.org/licenses/>.  */
     17 
     18 #define IN_TARGET_CODE 1
     19 
     20 #include "config.h"
     21 #include "system.h"
     22 #include "coretypes.h"
     23 #include "tm.h"
     24 #include "tm_d.h"
     25 #include "d/d-target.h"
     26 #include "d/d-target-def.h"
     27 
     28 /* Implement TARGET_D_CPU_VERSIONS for SPARC targets.  */
     29 
     30 void
     31 sparc_d_target_versions (void)
     32 {
     33   if (TARGET_64BIT)
     34     d_add_builtin_version ("SPARC64");
     35   else
     36     d_add_builtin_version ("SPARC");
     37 
     38   if (TARGET_V8PLUS)
     39     d_add_builtin_version ("SPARC_V8Plus");
     40 
     41   if (TARGET_FPU)
     42     {
     43       d_add_builtin_version ("D_HardFloat");
     44       d_add_builtin_version ("SPARC_HardFloat");
     45     }
     46   else
     47     {
     48       d_add_builtin_version ("D_SoftFloat");
     49       d_add_builtin_version ("SPARC_SoftFloat");
     50     }
     51 }
     52 
     53 /* Handle a call to `__traits(getTargetInfo, "floatAbi")'.  */
     54 
     55 static tree
     56 sparc_d_handle_target_float_abi (void)
     57 {
     58   const char *abi;
     59 
     60   if (TARGET_FPU)
     61     abi = "hard";
     62   else
     63     abi = "soft";
     64 
     65   return build_string_literal (strlen (abi) + 1, abi);
     66 }
     67 
     68 /* Implement TARGET_D_REGISTER_CPU_TARGET_INFO.  */
     69 
     70 void
     71 sparc_d_register_target_info (void)
     72 {
     73   const struct d_target_info_spec handlers[] = {
     74     { "floatAbi", sparc_d_handle_target_float_abi },
     75     { NULL, NULL },
     76   };
     77 
     78   d_add_target_info_handlers (handlers);
     79 }
     80