Home | History | Annotate | Line # | Download | only in pa
      1 /* Subroutines for the D front end on the HPPA architecture.
      2    Copyright (C) 2018-2022 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 "target.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 HPPA targets.  */
     29 
     30 void
     31 pa_d_target_versions (void)
     32 {
     33   if (TARGET_64BIT)
     34     d_add_builtin_version ("HPPA64");
     35   else
     36     d_add_builtin_version ("HPPA");
     37 
     38   if (TARGET_SOFT_FLOAT)
     39     d_add_builtin_version ("D_SoftFloat");
     40   else
     41     d_add_builtin_version ("D_HardFloat");
     42 }
     43 
     44 /* Handle a call to `__traits(getTargetInfo, "floatAbi")'.  */
     45 
     46 static tree
     47 pa_d_handle_target_float_abi (void)
     48 {
     49   const char *abi;
     50 
     51   if (TARGET_SOFT_FLOAT)
     52     abi = "soft";
     53   else
     54     abi = "hard";
     55 
     56   return build_string_literal (strlen (abi) + 1, abi);
     57 }
     58 
     59 /* Handle a call to `__traits(getTargetInfo, "objectFormat")'.  */
     60 
     61 static tree
     62 pa_d_handle_target_object_format (void)
     63 {
     64   const char *objfmt = NULL;
     65 
     66   if (TARGET_SOM)
     67     objfmt = "som";
     68 
     69   if (objfmt == NULL)
     70     return NULL_TREE;
     71 
     72   return build_string_literal (strlen (objfmt) + 1, objfmt);
     73 }
     74 
     75 /* Implement TARGET_D_REGISTER_CPU_TARGET_INFO.  */
     76 
     77 void
     78 pa_d_register_target_info (void)
     79 {
     80   const struct d_target_info_spec handlers[] = {
     81     { "floatAbi", pa_d_handle_target_float_abi },
     82     { "objectFormat", pa_d_handle_target_object_format },
     83     { NULL, NULL },
     84   };
     85 
     86   d_add_target_info_handlers (handlers);
     87 }
     88