1/* This file is part of the program psim. 2 3 Copyright (C) 1994-1995, Andrew Cagney <cagney@highland.com.au> 4 5 This program is free software; you can redistribute it and/or modify 6 it under the terms of the GNU General Public License as published by 7 the Free Software Foundation; either version 2 of the License, or 8 (at your option) any later version. 9 10 This program is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 GNU General Public License for more details. 14 15 You should have received a copy of the GNU General Public License 16 along with this program; if not, write to the Free Software 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 18 19 */ 20 21 22#ifndef _INLINE_H_ 23#define _INLINE_H_ 24 25 26#define STATIC(TYPE) static TYPE 27 28 29/* sim_endian is always inlined */ 30 31#if !defined(_SIM_ENDIAN_C_) && (SIM_ENDIAN_INLINE & INCLUDE_MODULE) 32# if (SIM_ENDIAN_INLINE & INLINE_MODULE) 33# define INLINE_PSIM_ENDIAN(TYPE) static INLINE TYPE UNUSED 34# define EXTERN_PSIM_ENDIAN(TYPE) static TYPE UNUSED 35# else 36# define INLINE_PSIM_ENDIAN(TYPE) static TYPE UNUSED 37# define EXTERN_PSIM_ENDIAN(TYPE) static TYPE UNUSED 38# endif 39#else 40# define INLINE_PSIM_ENDIAN(TYPE) TYPE 41# define EXTERN_PSIM_ENDIAN(TYPE) TYPE 42#endif 43 44#if (SIM_ENDIAN_INLINE & PSIM_INLINE_LOCALS) 45# define STATIC_INLINE_PSIM_ENDIAN(TYPE) static INLINE TYPE 46#else 47# define STATIC_INLINE_PSIM_ENDIAN(TYPE) static TYPE 48#endif 49 50 51/* bits is always inlined */ 52 53#if !defined(_BITS_C_) && (BITS_INLINE & INCLUDE_MODULE) 54# if (BITS_INLINE & INLINE_MODULE) 55# define INLINE_BITS(TYPE) static INLINE TYPE UNUSED 56# define EXTERN_BITS(TYPE) static TYPE UNUSED 57# else 58# define INLINE_BITS(TYPE) static TYPE UNUSED 59# define EXTERN_BITS(TYPE) static TYPE UNUSED 60# endif 61#else 62# define INLINE_BITS(TYPE) TYPE 63# define EXTERN_BITS(TYPE) TYPE 64#endif 65 66#if (BITS_INLINE & PSIM_INLINE_LOCALS) 67# define STATIC_INLINE_BITS(TYPE) static INLINE TYPE 68#else 69# define STATIC_INLINE_BITS(TYPE) static TYPE 70#endif 71 72 73/* core is inlined with inline.c */ 74 75#if defined(_INLINE_C_) && !defined(_CORE_C_) && (CORE_INLINE & INCLUDE_MODULE) 76# if (CORE_INLINE & INLINE_MODULE) 77# define INLINE_CORE(TYPE) static INLINE TYPE UNUSED 78# define EXTERN_CORE(TYPE) static TYPE UNUSED 79#else 80# define INLINE_CORE(TYPE) static TYPE UNUSED 81# define EXTERN_CORE(TYPE) static TYPE UNUSED 82#endif 83#else 84# define INLINE_CORE(TYPE) TYPE 85# define EXTERN_CORE(TYPE) TYPE 86#endif 87 88#if (CORE_INLINE & PSIM_INLINE_LOCALS) 89# define STATIC_INLINE_CORE(TYPE) static INLINE TYPE 90#else 91# define STATIC_INLINE_CORE(TYPE) static TYPE 92#endif 93 94 95/* vm is inlined with inline.c */ 96 97#if defined(_INLINE_C_) && !defined(_VM_C_) && (VM_INLINE & INCLUDE_MODULE) 98# if (VM_INLINE & INLINE_MODULE) 99# define INLINE_VM(TYPE) static INLINE TYPE UNUSED 100# define EXTERN_VM(TYPE) static TYPE UNUSED 101#else 102# define INLINE_VM(TYPE) static TYPE UNUSED 103# define EXTERN_VM(TYPE) static TYPE UNUSED 104#endif 105#else 106# define INLINE_VM(TYPE) TYPE 107# define EXTERN_VM(TYPE) TYPE 108#endif 109 110#if (VM_INLINE & PSIM_INLINE_LOCALS) 111# define STATIC_INLINE_VM(TYPE) static INLINE TYPE 112#else 113# define STATIC_INLINE_VM(TYPE) static TYPE 114#endif 115 116 117/* cpu is always inlined */ 118 119#if !defined(_CPU_C_) && (CPU_INLINE & INCLUDE_MODULE) 120# if (CPU_INLINE & INLINE_MODULE) 121# define INLINE_CPU(TYPE) static INLINE TYPE UNUSED 122# define EXTERN_CPU(TYPE) static TYPE UNUSED 123#else 124# define INLINE_CPU(TYPE) static TYPE UNUSED 125# define EXTERN_CPU(TYPE) static TYPE UNUSED 126#endif 127#else 128# define INLINE_CPU(TYPE) TYPE 129# define EXTERN_CPU(TYPE) TYPE 130#endif 131 132#if (CPU_INLINE & PSIM_INLINE_LOCALS) 133# define STATIC_INLINE_CPU(TYPE) static INLINE TYPE 134#else 135# define STATIC_INLINE_CPU(TYPE) static TYPE 136#endif 137 138 139/* model is inlined with inline.c */ 140 141#if defined(_INLINE_C_) && !defined(_MODEL_C_) && (MODEL_INLINE & INCLUDE_MODULE) 142# if (MODEL_INLINE & INLINE_MODULE) 143# define INLINE_MODEL(TYPE) static INLINE TYPE UNUSED 144# define EXTERN_MODEL(TYPE) static TYPE UNUSED 145#else 146# define INLINE_MODEL(TYPE) static TYPE UNUSED 147# define EXTERN_MODEL(TYPE) static TYPE UNUSED 148#endif 149#else 150# define INLINE_MODEL(TYPE) TYPE 151# define EXTERN_MODEL(TYPE) TYPE 152#endif 153 154#if (MODEL_INLINE & PSIM_INLINE_LOCALS) 155# define STATIC_INLINE_MODEL(TYPE) static INLINE TYPE 156#else 157# define STATIC_INLINE_MODEL(TYPE) static TYPE 158#endif 159 160 161/* events is inlined with inline.c */ 162 163#if defined(_INLINE_C_) && !defined(_EVENTS_C_) && (EVENTS_INLINE & INCLUDE_MODULE) 164# if (EVENTS_INLINE & INLINE_MODULE) 165# define INLINE_EVENTS(TYPE) static INLINE TYPE UNUSED 166# define EXTERN_EVENTS(TYPE) static TYPE UNUSED 167#else 168# define INLINE_EVENTS(TYPE) static TYPE UNUSED 169# define EXTERN_EVENTS(TYPE) static TYPE UNUSED 170#endif 171#else 172# define INLINE_EVENTS(TYPE) TYPE 173# define EXTERN_EVENTS(TYPE) TYPE 174#endif 175 176#if (EVENTS_INLINE & PSIM_INLINE_LOCALS) 177# define STATIC_INLINE_EVENTS(TYPE) static INLINE TYPE 178#else 179# define STATIC_INLINE_EVENTS(TYPE) static TYPE 180#endif 181 182 183/* mon is inlined with inline.c */ 184 185#if defined(_INLINE_C_) && !defined(_MON_C_) && (MON_INLINE & INCLUDE_MODULE) 186# if (MON_INLINE & INLINE_MODULE) 187# define INLINE_MON(TYPE) static INLINE TYPE UNUSED 188# define EXTERN_MON(TYPE) static TYPE UNUSED 189#else 190# define INLINE_MON(TYPE) static TYPE UNUSED 191# define EXTERN_MON(TYPE) static TYPE UNUSED 192#endif 193#else 194# define INLINE_MON(TYPE) TYPE 195# define EXTERN_MON(TYPE) TYPE 196#endif 197 198#if (MON_INLINE & PSIM_INLINE_LOCALS) 199# define STATIC_INLINE_MON(TYPE) static INLINE TYPE 200#else 201# define STATIC_INLINE_MON(TYPE) static TYPE 202#endif 203 204 205/* registers is inlined with inline.c */ 206 207#if defined(_INLINE_C_) && !defined(_REGISTERS_C_) && (REGISTERS_INLINE & INCLUDE_MODULE) 208# if (REGISTERS_INLINE & INLINE_MODULE) 209# define INLINE_REGISTERS(TYPE) static INLINE TYPE UNUSED 210# define EXTERN_REGISTERS(TYPE) static TYPE UNUSED 211#else 212# define INLINE_REGISTERS(TYPE) static TYPE UNUSED 213# define EXTERN_REGISTERS(TYPE) static TYPE UNUSED 214#endif 215#else 216# define INLINE_REGISTERS(TYPE) TYPE 217# define EXTERN_REGISTERS(TYPE) TYPE 218#endif 219 220#if (REGISTERS_INLINE & PSIM_INLINE_LOCALS) 221# define STATIC_INLINE_REGISTERS(TYPE) static INLINE TYPE 222#else 223# define STATIC_INLINE_REGISTERS(TYPE) static TYPE 224#endif 225 226 227/* interrupts is inlined with inline.c */ 228 229#if defined(_INLINE_C_) && !defined(_INTERRUPTS_C_) && (INTERRUPTS_INLINE & INCLUDE_MODULE) 230# if (INTERRUPTS_INLINE & INLINE_MODULE) 231# define INLINE_INTERRUPTS(TYPE) static INLINE TYPE UNUSED 232# define EXTERN_INTERRUPTS(TYPE) static TYPE UNUSED 233#else 234# define INLINE_INTERRUPTS(TYPE) static TYPE UNUSED 235# define EXTERN_INTERRUPTS(TYPE) static TYPE UNUSED 236#endif 237#else 238# define INLINE_INTERRUPTS(TYPE) TYPE 239# define EXTERN_INTERRUPTS(TYPE) TYPE 240#endif 241 242#if (INTERRUPTS_INLINE & PSIM_INLINE_LOCALS) 243# define STATIC_INLINE_INTERRUPTS(TYPE) static INLINE TYPE 244#else 245# define STATIC_INLINE_INTERRUPTS(TYPE) static TYPE 246#endif 247 248 249/* device is inlined with inline.c */ 250 251#if defined(_INLINE_C_) && !defined(_DEVICE_C_) && (DEVICE_INLINE & INCLUDE_MODULE) 252# if (DEVICE_INLINE & INLINE_MODULE) 253# define INLINE_DEVICE(TYPE) static INLINE TYPE UNUSED 254# define EXTERN_DEVICE(TYPE) static TYPE UNUSED 255#else 256# define INLINE_DEVICE(TYPE) static TYPE UNUSED 257# define EXTERN_DEVICE(TYPE) static TYPE UNUSED 258#endif 259#else 260# define INLINE_DEVICE(TYPE) TYPE 261# define EXTERN_DEVICE(TYPE) TYPE 262#endif 263 264#if (DEVICE_INLINE & PSIM_INLINE_LOCALS) 265# define STATIC_INLINE_DEVICE(TYPE) static INLINE TYPE 266#else 267# define STATIC_INLINE_DEVICE(TYPE) static TYPE 268#endif 269 270 271/* tree is inlined with inline.c */ 272 273#if defined(_INLINE_C_) && !defined(_TREE_C_) && (TREE_INLINE & INCLUDE_MODULE) 274# if (TREE_INLINE & INLINE_MODULE) 275# define INLINE_TREE(TYPE) static INLINE TYPE UNUSED 276# define EXTERN_TREE(TYPE) static TYPE UNUSED 277#else 278# define INLINE_TREE(TYPE) static TYPE UNUSED 279# define EXTERN_TREE(TYPE) static TYPE UNUSED 280#endif 281#else 282# define INLINE_TREE(TYPE) TYPE 283# define EXTERN_TREE(TYPE) TYPE 284#endif 285 286#if (TREE_INLINE & PSIM_INLINE_LOCALS) 287# define STATIC_INLINE_TREE(TYPE) static INLINE TYPE 288#else 289# define STATIC_INLINE_TREE(TYPE) static TYPE 290#endif 291 292 293/* spreg is inlined with inline.c */ 294 295#if defined(_INLINE_C_) && !defined(_SPREG_C_) && (SPREG_INLINE & INCLUDE_MODULE) 296# if (SPREG_INLINE & INLINE_MODULE) 297# define INLINE_SPREG(TYPE) static INLINE TYPE UNUSED 298# define EXTERN_SPREG(TYPE) static TYPE UNUSED 299#else 300# define INLINE_SPREG(TYPE) static TYPE UNUSED 301# define EXTERN_SPREG(TYPE) static TYPE UNUSED 302#endif 303#else 304# define INLINE_SPREG(TYPE) TYPE 305# define EXTERN_SPREG(TYPE) TYPE 306#endif 307 308#if (SPREG_INLINE & PSIM_INLINE_LOCALS) 309# define STATIC_INLINE_SPREG(TYPE) static INLINE TYPE 310#else 311# define STATIC_INLINE_SPREG(TYPE) static TYPE 312#endif 313 314 315/* semantics is inlined with inline.c */ 316 317#if defined(_INLINE_C_) && !defined(_SEMANTICS_C_) && (SEMANTICS_INLINE & INCLUDE_MODULE) 318# if (SEMANTICS_INLINE & INLINE_MODULE) 319# define PSIM_INLINE_SEMANTICS(TYPE) static INLINE TYPE UNUSED 320# define PSIM_EXTERN_SEMANTICS(TYPE) static TYPE UNUSED REGPARM 321#else 322# define PSIM_INLINE_SEMANTICS(TYPE) static TYPE UNUSED REGPARM 323# define PSIM_EXTERN_SEMANTICS(TYPE) static TYPE UNUSED REGPARM 324#endif 325#else 326# define PSIM_INLINE_SEMANTICS(TYPE) TYPE REGPARM 327# define PSIM_EXTERN_SEMANTICS(TYPE) TYPE REGPARM 328#endif 329 330#if 0 /* this isn't used */ 331#if (SEMANTICS_INLINE & PSIM_INLINE_LOCALS) 332# define STATIC_INLINE_SEMANTICS(TYPE) static INLINE TYPE 333#else 334# define STATIC_INLINE_SEMANTICS(TYPE) static TYPE REGPARM 335#endif 336#endif 337 338 339/* idecode is actually not inlined */ 340 341#if defined(_INLINE_C_) && !defined(_IDECODE_C_) && (IDECODE_INLINE & INCLUDE_MODULE) 342# if (IDECODE_INLINE & INLINE_MODULE) 343# define PSIM_INLINE_IDECODE(TYPE) static INLINE TYPE UNUSED 344# define EXTERN_IDECODE(TYPE) static TYPE UNUSED REGPARM 345#else 346# define PSIM_INLINE_IDECODE(TYPE) static TYPE UNUSED REGPARM 347# define EXTERN_IDECODE(TYPE) static TYPE UNUSED REGPARM 348#endif 349#else 350# define PSIM_INLINE_IDECODE(TYPE) TYPE REGPARM 351# define EXTERN_IDECODE(TYPE) TYPE REGPARM 352#endif 353 354#if 0 /* this isn't used */ 355#if (IDECODE_INLINE & PSIM_INLINE_LOCALS) 356# define STATIC_INLINE_IDECODE(TYPE) static INLINE TYPE 357#else 358# define STATIC_INLINE_IDECODE(TYPE) static TYPE REGPARM 359#endif 360#endif 361 362 363/* icache is inlined with inline.c */ 364 365#if defined(_INLINE_C_) && !defined(_ICACHE_C_) && (ICACHE_INLINE & INCLUDE_MODULE) 366# if (ICACHE_INLINE & INLINE_MODULE) 367# define PSIM_INLINE_ICACHE(TYPE) static INLINE TYPE UNUSED 368# define EXTERN_ICACHE(TYPE) static TYPE UNUSED REGPARM 369#else 370# define PSIM_INLINE_ICACHE(TYPE) static TYPE UNUSED REGPARM 371# define EXTERN_ICACHE(TYPE) static TYPE UNUSED REGPARM 372#endif 373#else 374# define PSIM_INLINE_ICACHE(TYPE) TYPE REGPARM 375# define EXTERN_ICACHE(TYPE) TYPE REGPARM 376#endif 377 378#if 0 /* this isn't used */ 379#if (ICACHE_INLINE & PSIM_INLINE_LOCALS) 380# define STATIC_INLINE_ICACHE(TYPE) static INLINE TYPE 381#else 382# define STATIC_INLINE_ICACHE(TYPE) static TYPE REGPARM 383#endif 384#endif 385 386 387/* support is always inlined */ 388 389#if !defined(_SUPPORT_C_) && (SUPPORT_INLINE & INCLUDE_MODULE) 390# if (SUPPORT_INLINE & INLINE_MODULE) 391# define PSIM_INLINE_SUPPORT(TYPE) static INLINE TYPE UNUSED 392# define EXTERN_SUPPORT(TYPE) static TYPE UNUSED 393#else 394# define PSIM_INLINE_SUPPORT(TYPE) static TYPE UNUSED 395# define EXTERN_SUPPORT(TYPE) static TYPE UNUSED 396#endif 397#else 398# define PSIM_INLINE_SUPPORT(TYPE) TYPE 399# define EXTERN_SUPPORT(TYPE) TYPE 400#endif 401 402#if 0 /* this isn't used */ 403#if (SUPPORT_INLINE & PSIM_INLINE_LOCALS) 404# define STATIC_INLINE_SUPPORT(TYPE) static INLINE TYPE 405#else 406# define STATIC_INLINE_SUPPORT(TYPE) static TYPE 407#endif 408#endif 409 410 411/* options is inlined with inline.c */ 412 413#if defined(_INLINE_C_) && !defined(_OPTIONS_C_) && (OPTIONS_INLINE & INCLUDE_MODULE) 414# if (OPTIONS_INLINE & INLINE_MODULE) 415# define INLINE_OPTIONS(TYPE) static INLINE TYPE UNUSED 416# define EXTERN_OPTIONS(TYPE) static TYPE UNUSED 417#else 418# define INLINE_OPTIONS(TYPE) static TYPE UNUSED 419# define EXTERN_OPTIONS(TYPE) static TYPE UNUSED 420#endif 421#else 422# define INLINE_OPTIONS(TYPE) TYPE 423# define EXTERN_OPTIONS(TYPE) TYPE 424#endif 425 426#if (OPTIONS_INLINE & PSIM_INLINE_LOCALS) 427# define STATIC_INLINE_OPTIONS(TYPE) static INLINE TYPE 428#else 429# define STATIC_INLINE_OPTIONS(TYPE) static TYPE 430#endif 431 432 433/* os_emul is inlined with inline.c */ 434 435#if defined(_INLINE_C_) && !defined(_OS_EMUL_C_) && (OS_EMUL_INLINE & INCLUDE_MODULE) 436# if (OS_EMUL_INLINE & INLINE_MODULE) 437# define INLINE_OS_EMUL(TYPE) static INLINE TYPE UNUSED 438# define EXTERN_OS_EMUL(TYPE) static TYPE UNUSED 439#else 440# define INLINE_OS_EMUL(TYPE) static TYPE UNUSED 441# define EXTERN_OS_EMUL(TYPE) static TYPE UNUSED 442#endif 443#else 444# define INLINE_OS_EMUL(TYPE) TYPE 445# define EXTERN_OS_EMUL(TYPE) TYPE 446#endif 447 448#if (OS_EMUL_INLINE & PSIM_INLINE_LOCALS) 449# define STATIC_INLINE_OS_EMUL(TYPE) static INLINE TYPE 450#else 451# define STATIC_INLINE_OS_EMUL(TYPE) static TYPE 452#endif 453 454 455/* psim is actually not inlined */ 456 457#if defined(_INLINE_C_) && !defined(_PSIM_C_) && (PSIM_INLINE & INCLUDE_MODULE) 458# if (PSIM_INLINE & INLINE_MODULE) 459# define INLINE_PSIM(TYPE) static INLINE TYPE UNUSED 460# define EXTERN_PSIM(TYPE) static TYPE UNUSED 461#else 462# define INLINE_PSIM(TYPE) static TYPE UNUSED 463# define EXTERN_PSIM(TYPE) static TYPE UNUSED 464#endif 465#else 466# define INLINE_PSIM(TYPE) TYPE 467# define EXTERN_PSIM(TYPE) TYPE 468#endif 469 470#if (PSIM_INLINE & PSIM_INLINE_LOCALS) 471# define STATIC_INLINE_PSIM(TYPE) static INLINE TYPE 472#else 473# define STATIC_INLINE_PSIM(TYPE) static TYPE 474#endif 475 476 477/* cap is inlined with inline.c */ 478 479#if defined(_INLINE_C_) && !defined(_CAP_C_) && (CAP_INLINE & INCLUDE_MODULE) 480# if (CAP_INLINE & INLINE_MODULE) 481# define INLINE_CAP(TYPE) static INLINE TYPE UNUSED 482# define EXTERN_CAP(TYPE) static TYPE UNUSED 483#else 484# define INLINE_CAP(TYPE) static TYPE UNUSED 485# define EXTERN_CAP(TYPE) static TYPE UNUSED 486#endif 487#else 488# define INLINE_CAP(TYPE) TYPE 489# define EXTERN_CAP(TYPE) TYPE 490#endif 491 492#if (CAP_INLINE & PSIM_INLINE_LOCALS) 493# define STATIC_INLINE_CAP(TYPE) static INLINE TYPE 494#else 495# define STATIC_INLINE_CAP(TYPE) static TYPE 496#endif 497 498#endif 499