[BACK]Return to profile.h CVS log [TXT][DIR] Up to [local] / sys / arch / alpha / include

Annotation of sys/arch/alpha/include/profile.h, Revision 1.1.1.1

1.1       nbrk        1: /*     $OpenBSD: profile.h,v 1.5 1997/01/24 19:57:17 niklas Exp $      */
                      2: /*     $NetBSD: profile.h,v 1.7 1996/11/13 22:21:01 cgd Exp $  */
                      3:
                      4: /*
                      5:  * Copyright (c) 1994, 1995, 1996 Carnegie-Mellon University.
                      6:  * All rights reserved.
                      7:  *
                      8:  * Author: Chris G. Demetriou
                      9:  *
                     10:  * Permission to use, copy, modify and distribute this software and
                     11:  * its documentation is hereby granted, provided that both the copyright
                     12:  * notice and this permission notice appear in all copies of the
                     13:  * software, derivative works or modified versions, and any portions
                     14:  * thereof, and that both notices appear in supporting documentation.
                     15:  *
                     16:  * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
                     17:  * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
                     18:  * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
                     19:  *
                     20:  * Carnegie Mellon requests users of this software to return to
                     21:  *
                     22:  *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
                     23:  *  School of Computer Science
                     24:  *  Carnegie Mellon University
                     25:  *  Pittsburgh PA 15213-3890
                     26:  *
                     27:  * any improvements or extensions that they make and grant Carnegie the
                     28:  * rights to redistribute these changes.
                     29:  */
                     30:
                     31: #define        _MCOUNT_DECL    void mcount
                     32:
                     33: #if 0
                     34: /*
                     35:  * XXX The definition of MCOUNT below is really the following code, run
                     36:  * XXX through cpp, since the inline assembly isn't preprocessed.
                     37:  */
                     38: #define        OFFSET_AT       0
                     39: #define OFFSET_V0      8
                     40: #define OFFSET_T0      16
                     41: #define OFFSET_T1      24
                     42: #define OFFSET_T2      32
                     43: #define OFFSET_T3      40
                     44: #define OFFSET_T4      48
                     45: #define OFFSET_T5      56
                     46: #define OFFSET_T6      64
                     47: #define OFFSET_T7      72
                     48: #define OFFSET_S6      80
                     49: #define OFFSET_A0      88
                     50: #define OFFSET_A1      96
                     51: #define OFFSET_A2      104
                     52: #define OFFSET_A3      112
                     53: #define OFFSET_A4      120
                     54: #define OFFSET_A5      128
                     55: #define OFFSET_T8      136
                     56: #define OFFSET_T9      144
                     57: #define OFFSET_T10     152
                     58: #define OFFSET_T11     160
                     59: #define OFFSET_RA      168
                     60: #define OFFSET_T12     176
                     61: #define OFFSET_GP      184
                     62: #define        FRAME_SIZE      192
                     63:
                     64: LEAF(_mcount,0)                        /* XXX */
                     65:        .set noat
                     66:        .set noreorder
                     67:
                     68:        lda     sp, -FRAME_SIZE(sp)
                     69:
                     70:        stq     at_reg, OFFSET_AT(sp)
                     71:        stq     v0, OFFSET_V0(sp)
                     72:        stq     t0, OFFSET_T0(sp)
                     73:        stq     t1, OFFSET_T1(sp)
                     74:        stq     t2, OFFSET_T2(sp)
                     75:        stq     t3, OFFSET_T3(sp)
                     76:        stq     t4, OFFSET_T4(sp)
                     77:        stq     t5, OFFSET_T5(sp)
                     78:        stq     t6, OFFSET_T6(sp)
                     79:        stq     t7, OFFSET_T7(sp)
                     80:        stq     s6, OFFSET_S6(sp)       /* XXX because run _after_ prologue. */
                     81:        stq     a0, OFFSET_A0(sp)
                     82:        stq     a1, OFFSET_A1(sp)
                     83:        stq     a2, OFFSET_A2(sp)
                     84:        stq     a3, OFFSET_A3(sp)
                     85:        stq     a4, OFFSET_A4(sp)
                     86:        stq     a5, OFFSET_A5(sp)
                     87:        stq     t8, OFFSET_T8(sp)
                     88:        stq     t9, OFFSET_T9(sp)
                     89:        stq     t10, OFFSET_T10(sp)
                     90:        stq     t11, OFFSET_T11(sp)
                     91:        stq     ra, OFFSET_RA(sp)
                     92:        stq     t12, OFFSET_T12(sp)
                     93:        stq     gp, OFFSET_GP(sp)
                     94:
                     95:        br      pv, LX99
                     96: LX99:  SETGP(pv)
                     97:        mov     ra, a0
                     98:        mov     at_reg, a1
                     99:        CALL(mcount)
                    100:
                    101:        ldq     v0, OFFSET_V0(sp)
                    102:        ldq     t0, OFFSET_T0(sp)
                    103:        ldq     t1, OFFSET_T1(sp)
                    104:        ldq     t2, OFFSET_T2(sp)
                    105:        ldq     t3, OFFSET_T3(sp)
                    106:        ldq     t4, OFFSET_T4(sp)
                    107:        ldq     t5, OFFSET_T5(sp)
                    108:        ldq     t6, OFFSET_T6(sp)
                    109:        ldq     t7, OFFSET_T7(sp)
                    110:        ldq     s6, OFFSET_S6(sp)       /* XXX because run _after_ prologue. */
                    111:        ldq     a0, OFFSET_A0(sp)
                    112:        ldq     a1, OFFSET_A1(sp)
                    113:        ldq     a2, OFFSET_A2(sp)
                    114:        ldq     a3, OFFSET_A3(sp)
                    115:        ldq     a4, OFFSET_A4(sp)
                    116:        ldq     a5, OFFSET_A5(sp)
                    117:        ldq     t8, OFFSET_T8(sp)
                    118:        ldq     t9, OFFSET_T9(sp)
                    119:        ldq     t10, OFFSET_T10(sp)
                    120:        ldq     t11, OFFSET_T11(sp)
                    121:        ldq     ra, OFFSET_RA(sp)
                    122:        stq     t12, OFFSET_T12(sp)
                    123:        ldq     gp, OFFSET_GP(sp)
                    124:
                    125:        ldq     at_reg, OFFSET_AT(sp)
                    126:
                    127:        lda     sp, FRAME_SIZE(sp)
                    128:        ret     zero, (at_reg), 1
                    129:
                    130:        END(_mcount)
                    131: #endif /* 0 */
                    132:
                    133: #define MCOUNT asm("           \
                    134:        .globl  _mcount;        \
                    135:        .ent    _mcount 0;      \
                    136: _mcount:;                      \
                    137:        .frame  $30,0,$26;      \
                    138:        .set noat;              \
                    139:        .set noreorder;         \
                    140:                                \
                    141:        lda     $30, -192($30); \
                    142:                                \
                    143:        stq     $28, 0($30);    \
                    144:        stq     $0, 8($30);     \
                    145:        stq     $1, 16($30);    \
                    146:        stq     $2, 24($30);    \
                    147:        stq     $3, 32($30);    \
                    148:        stq     $4, 40($30);    \
                    149:        stq     $5, 48($30);    \
                    150:        stq     $6, 56($30);    \
                    151:        stq     $7, 64($30);    \
                    152:        stq     $8, 72($30);    \
                    153:        stq     $15, 80($30);   \
                    154:        stq     $16, 88($30);   \
                    155:        stq     $17, 96($30);   \
                    156:        stq     $18, 104($30);  \
                    157:        stq     $19, 112($30);  \
                    158:        stq     $20, 120($30);  \
                    159:        stq     $21, 128($30);  \
                    160:        stq     $22, 136($30);  \
                    161:        stq     $23, 144($30);  \
                    162:        stq     $24, 152($30);  \
                    163:        stq     $25, 160($30);  \
                    164:        stq     $26, 168($30);  \
                    165:        stq     $27, 176($30);  \
                    166:        stq     $29, 184($30);  \
                    167:                                \
                    168:        br      $27, LX98;      \
                    169: LX98:  ldgp    $29,0($27);     \
                    170:        mov     $26, $16;       \
                    171:        mov     $28, $17;       \
                    172:        jsr     $26,mcount;     \
                    173:        ldgp    $29,0($26);     \
                    174:                                \
                    175:        ldq     $0, 8($30);     \
                    176:        ldq     $1, 16($30);    \
                    177:        ldq     $2, 24($30);    \
                    178:        ldq     $3, 32($30);    \
                    179:        ldq     $4, 40($30);    \
                    180:        ldq     $5, 48($30);    \
                    181:        ldq     $6, 56($30);    \
                    182:        ldq     $7, 64($30);    \
                    183:        ldq     $8, 72($30);    \
                    184:        ldq     $15, 80($30);   \
                    185:        ldq     $16, 88($30);   \
                    186:        ldq     $17, 96($30);   \
                    187:        ldq     $18, 104($30);  \
                    188:        ldq     $19, 112($30);  \
                    189:        ldq     $20, 120($30);  \
                    190:        ldq     $21, 128($30);  \
                    191:        ldq     $22, 136($30);  \
                    192:        ldq     $23, 144($30);  \
                    193:        ldq     $24, 152($30);  \
                    194:        ldq     $25, 160($30);  \
                    195:        ldq     $25, 160($30);  \
                    196:        ldq     $26, 168($30);  \
                    197:        ldq     $27, 176($30);  \
                    198:        ldq     $29, 184($30);  \
                    199:                                \
                    200:        lda     $30, 192($30);  \
                    201:        ret     $31, ($28), 1;  \
                    202:                                \
                    203:        .end    _mcount");
                    204:
                    205: #ifdef _KERNEL
                    206: /*
                    207:  * The following two macros do splhigh and splx respectively.
                    208:  * _alpha_pal_swpipl is a special version of alpha_pal_swpipl which
                    209:  * doesn't include profiling support.
                    210:  *
                    211:  * XXX These macros should probably use inline assembly.
                    212:  */
                    213: #define MCOUNT_ENTER \
                    214:        s = _alpha_pal_swpipl(ALPHA_PSL_IPL_HIGH)
                    215: #define MCOUNT_EXIT \
                    216:        (void)_alpha_pal_swpipl(s);
                    217: #endif

CVSweb