Home | History | Annotate | Line # | Download | only in ppc
inline.h revision 1.1.1.1
      1 /*  This file is part of the program psim.
      2 
      3     Copyright (C) 1994-1995, Andrew Cagney <cagney (at) 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