196263Sobrien/* General-purpose hooks. 2169689Skan Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc. 396263Sobrien 496263SobrienThis program is free software; you can redistribute it and/or modify it 596263Sobrienunder the terms of the GNU General Public License as published by the 696263SobrienFree Software Foundation; either version 2, or (at your option) any 796263Sobrienlater version. 896263Sobrien 996263SobrienThis program is distributed in the hope that it will be useful, 1096263Sobrienbut WITHOUT ANY WARRANTY; without even the implied warranty of 1196263SobrienMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1296263SobrienGNU General Public License for more details. 1396263Sobrien 1496263SobrienYou should have received a copy of the GNU General Public License 1596263Sobrienalong with this program; if not, write to the Free Software 16169689SkanFoundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 1796263Sobrien 1896263Sobrien In other words, you are welcome to use, share and improve this program. 1996263Sobrien You are forbidden to forbid anyone else to use, share and improve 2096263Sobrien what you give them. Help stamp out software-hoarding! */ 2196263Sobrien 2296263Sobrien/* This file contains generic hooks that can be used as defaults for 2396263Sobrien target or language-dependent hook initializers. */ 2496263Sobrien 2596263Sobrien#include "config.h" 2696263Sobrien#include "system.h" 27132718Skan#include "coretypes.h" 28132718Skan#include "tm.h" 2996263Sobrien#include "hooks.h" 3096263Sobrien 31102780Skan/* Generic hook that does absolutely zappo. */ 32102780Skanvoid 33132718Skanhook_void_void (void) 34102780Skan{ 35102780Skan} 36102780Skan 3796263Sobrien/* Generic hook that takes no arguments and returns false. */ 3896263Sobrienbool 39132718Skanhook_bool_void_false (void) 4096263Sobrien{ 4196263Sobrien return false; 4296263Sobrien} 43107590Sobrien 44169689Skan/* Generic hook that takes no arguments and returns true. */ 45169689Skanbool 46169689Skanhook_bool_void_true (void) 47169689Skan{ 48169689Skan return true; 49169689Skan} 50169689Skan 51169689Skan/* Generic hook that takes no arguments and returns NO_REGS. */ 52132718Skanint 53132718Skanhook_int_void_no_regs (void) 54132718Skan{ 55132718Skan return NO_REGS; 56132718Skan} 57132718Skan 58132718Skan/* Generic hook that takes (bool) and returns false. */ 59132718Skanbool 60132718Skanhook_bool_bool_false (bool a ATTRIBUTE_UNUSED) 61132718Skan{ 62132718Skan return false; 63132718Skan} 64132718Skan 65169689Skan/* Generic hook that takes (enum machine_mode) and returns false. */ 66169689Skanbool 67169689Skanhook_bool_mode_false (enum machine_mode mode ATTRIBUTE_UNUSED) 68169689Skan{ 69169689Skan return false; 70169689Skan} 71132718Skan 72169689Skan/* Generic hook that takes (enum machine_mode, rtx) and returns false. */ 73169689Skanbool 74169689Skanhook_bool_mode_rtx_false (enum machine_mode mode ATTRIBUTE_UNUSED, 75169689Skan rtx value ATTRIBUTE_UNUSED) 76117395Skan{ 77169689Skan return false; 78117395Skan} 79117395Skan 80169689Skan/* Generic hook that takes (enum machine_mode, rtx) and returns true. */ 81169689Skanbool 82169689Skanhook_bool_mode_rtx_true (enum machine_mode mode ATTRIBUTE_UNUSED, 83169689Skan rtx value ATTRIBUTE_UNUSED) 84117395Skan{ 85169689Skan return true; 86117395Skan} 87117395Skan 88169689Skan/* Generic hook that takes (FILE *, const char *) and does nothing. */ 89132718Skanvoid 90169689Skanhook_void_FILEptr_constcharptr (FILE *a ATTRIBUTE_UNUSED, const char *b ATTRIBUTE_UNUSED) 91132718Skan{ 92132718Skan} 93132718Skan 94117395Skan/* Used for the TARGET_ASM_CAN_OUTPUT_MI_THUNK hook. */ 95107590Sobrienbool 96132718Skanhook_bool_tree_hwi_hwi_tree_false (tree a ATTRIBUTE_UNUSED, 97132718Skan HOST_WIDE_INT b ATTRIBUTE_UNUSED, 98132718Skan HOST_WIDE_INT c ATTRIBUTE_UNUSED, 99132718Skan tree d ATTRIBUTE_UNUSED) 100107590Sobrien{ 101107590Sobrien return false; 102107590Sobrien} 103117395Skan 104117395Skanbool 105132718Skanhook_bool_tree_hwi_hwi_tree_true (tree a ATTRIBUTE_UNUSED, 106132718Skan HOST_WIDE_INT b ATTRIBUTE_UNUSED, 107132718Skan HOST_WIDE_INT c ATTRIBUTE_UNUSED, 108132718Skan tree d ATTRIBUTE_UNUSED) 109117395Skan{ 110117395Skan return true; 111117395Skan} 112117395Skan 113117395Skanbool 114132718Skanhook_bool_constcharptr_size_t_false (const char *a ATTRIBUTE_UNUSED, 115132718Skan size_t b ATTRIBUTE_UNUSED) 116117395Skan{ 117132718Skan return false; 118132718Skan} 119132718Skan 120132718Skanbool 121169689Skanhook_bool_size_t_constcharptr_int_true (size_t a ATTRIBUTE_UNUSED, 122169689Skan const char *b ATTRIBUTE_UNUSED, 123169689Skan int c ATTRIBUTE_UNUSED) 124169689Skan{ 125169689Skan return true; 126169689Skan} 127169689Skan 128169689Skanbool 129132718Skandefault_can_output_mi_thunk_no_vcall (tree a ATTRIBUTE_UNUSED, 130132718Skan HOST_WIDE_INT b ATTRIBUTE_UNUSED, 131132718Skan HOST_WIDE_INT c, 132132718Skan tree d ATTRIBUTE_UNUSED) 133132718Skan{ 134117395Skan return c == 0; 135117395Skan} 136117395Skan 137169689Skanint 138169689Skanhook_int_tree_0 (tree a ATTRIBUTE_UNUSED) 139169689Skan{ 140169689Skan return 0; 141169689Skan} 142169689Skan 143117395Skan/* ??? Used for comp_type_attributes, which ought to return bool. */ 144117395Skanint 145132718Skanhook_int_tree_tree_1 (tree a ATTRIBUTE_UNUSED, tree b ATTRIBUTE_UNUSED) 146117395Skan{ 147117395Skan return 1; 148117395Skan} 149117395Skan 150132718Skanint 151132718Skanhook_int_rtx_0 (rtx a ATTRIBUTE_UNUSED) 152132718Skan{ 153132718Skan return 0; 154132718Skan} 155132718Skan 156132718Skanint 157132718Skanhook_int_size_t_constcharptr_int_0 (size_t a ATTRIBUTE_UNUSED, 158132718Skan const char *b ATTRIBUTE_UNUSED, 159132718Skan int c ATTRIBUTE_UNUSED) 160132718Skan{ 161132718Skan return 0; 162132718Skan} 163132718Skan 164132718Skanunsigned int 165132718Skanhook_uint_uint_constcharptrptr_0 (unsigned int a ATTRIBUTE_UNUSED, 166132718Skan const char **b ATTRIBUTE_UNUSED) 167132718Skan{ 168132718Skan return 0; 169132718Skan} 170132718Skan 171117395Skanvoid 172132718Skanhook_void_tree (tree a ATTRIBUTE_UNUSED) 173117395Skan{ 174117395Skan} 175117395Skan 176117395Skanvoid 177169689Skanhook_void_constcharptr (const char *a ATTRIBUTE_UNUSED) 178169689Skan{ 179169689Skan} 180169689Skan 181169689Skanvoid 182132718Skanhook_void_tree_treeptr (tree a ATTRIBUTE_UNUSED, tree *b ATTRIBUTE_UNUSED) 183117395Skan{ 184117395Skan} 185117395Skan 186117395Skanbool 187132718Skanhook_bool_tree_false (tree a ATTRIBUTE_UNUSED) 188117395Skan{ 189117395Skan return false; 190117395Skan} 191117395Skan 192117395Skanbool 193132718Skanhook_bool_tree_true (tree a ATTRIBUTE_UNUSED) 194117395Skan{ 195132718Skan return true; 196132718Skan} 197132718Skan 198132718Skanbool 199132718Skanhook_bool_tree_tree_false (tree a ATTRIBUTE_UNUSED, tree b ATTRIBUTE_UNUSED) 200132718Skan{ 201117395Skan return false; 202117395Skan} 203132718Skan 204132718Skanbool 205169689Skanhook_bool_tree_bool_false (tree a ATTRIBUTE_UNUSED, bool b ATTRIBUTE_UNUSED) 206169689Skan{ 207169689Skan return false; 208169689Skan} 209169689Skan 210169689Skanbool 211132718Skanhook_bool_rtx_false (rtx a ATTRIBUTE_UNUSED) 212132718Skan{ 213132718Skan return false; 214132718Skan} 215132718Skan 216132718Skanbool 217132718Skanhook_bool_uintp_uintp_false (unsigned int *a ATTRIBUTE_UNUSED, 218132718Skan unsigned int *b ATTRIBUTE_UNUSED) 219132718Skan{ 220132718Skan return false; 221132718Skan} 222132718Skan 223132718Skanbool 224132718Skanhook_bool_rtx_int_int_intp_false (rtx a ATTRIBUTE_UNUSED, 225132718Skan int b ATTRIBUTE_UNUSED, 226132718Skan int c ATTRIBUTE_UNUSED, 227132718Skan int *d ATTRIBUTE_UNUSED) 228132718Skan{ 229132718Skan return false; 230132718Skan} 231132718Skan 232132718Skan/* Generic hook that takes an rtx and returns it. */ 233132718Skanrtx 234132718Skanhook_rtx_rtx_identity (rtx x) 235132718Skan{ 236132718Skan return x; 237132718Skan} 238132718Skan 239132718Skan/* Generic hook that takes an rtx and returns NULL_RTX. */ 240132718Skanrtx 241132718Skanhook_rtx_rtx_null (rtx x ATTRIBUTE_UNUSED) 242132718Skan{ 243132718Skan return NULL; 244132718Skan} 245132718Skan 246132718Skan/* Generic hook that takes a tree and an int and returns NULL_RTX. */ 247132718Skanrtx 248132718Skanhook_rtx_tree_int_null (tree a ATTRIBUTE_UNUSED, int b ATTRIBUTE_UNUSED) 249132718Skan{ 250132718Skan return NULL; 251132718Skan} 252132718Skan 253169689Skan/* Generic hook that takes three trees and returns the last one as is. */ 254169689Skantree 255169689Skanhook_tree_tree_tree_tree_3rd_identity (tree a ATTRIBUTE_UNUSED, 256169689Skan tree b ATTRIBUTE_UNUSED, tree c) 257169689Skan{ 258169689Skan return c; 259169689Skan} 260169689Skan 261146895Skan/* Generic hook that takes a tree and returns a NULL string. */ 262146895Skanconst char * 263146895Skanhook_constcharptr_tree_null (tree t ATTRIBUTE_UNUSED) 264146895Skan{ 265146895Skan return NULL; 266146895Skan} 267169689Skan 268169689Skantree 269169689Skanhook_tree_tree_tree_bool_null (tree t0 ATTRIBUTE_UNUSED, tree t1 ATTRIBUTE_UNUSED, 270169689Skan bool ignore ATTRIBUTE_UNUSED) 271169689Skan{ 272169689Skan return NULL; 273169689Skan} 274169689Skan 275169689Skantree 276169689Skanhook_tree_tree_tree_null (tree t0 ATTRIBUTE_UNUSED, tree t1 ATTRIBUTE_UNUSED) 277169689Skan{ 278169689Skan return NULL; 279169689Skan} 280169689Skan 281169689Skan/* Generic hook that takes a rtx and returns a NULL string. */ 282169689Skanconst char * 283169689Skanhook_constcharptr_rtx_null (rtx r ATTRIBUTE_UNUSED) 284169689Skan{ 285169689Skan return NULL; 286169689Skan} 287169689Skan 288169689Skanconst char * 289169689Skanhook_constcharptr_tree_tree_null (tree t0 ATTRIBUTE_UNUSED, 290169689Skan tree t1 ATTRIBUTE_UNUSED) 291169689Skan{ 292169689Skan return NULL; 293169689Skan} 294169689Skan 295169689Skanconst char * 296169689Skanhook_constcharptr_int_tree_null (int i ATTRIBUTE_UNUSED, 297169689Skan tree t0 ATTRIBUTE_UNUSED) 298169689Skan{ 299169689Skan return NULL; 300169689Skan} 301169689Skan 302169689Skanconst char * 303169689Skanhook_constcharptr_int_tree_tree_null (int i ATTRIBUTE_UNUSED, 304169689Skan tree t0 ATTRIBUTE_UNUSED, 305169689Skan tree t1 ATTRIBUTE_UNUSED) 306169689Skan{ 307169689Skan return NULL; 308169689Skan} 309