⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 defs.h

📁 Newlib 嵌入式 C库 标准实现代码
💻 H
字号:
/* * Copyright (c) 1990 The Regents of the University of California. * All rights reserved. * * Redistribution and use in source and binary forms are permitted * provided that the above copyright notice and this paragraph are * duplicated in all such forms and that any documentation, * advertising materials, and other materials related to such * distribution and use acknowledge that the software was developed * by the University of California, Berkeley.  The name of the * University may not be used to endorse or promote products derived * from this software without specific prior written permission. * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. */#include "pcc_prefix.s"#define	BLANK#define	BANNER(str)	BLANK	.VERSION str#define	ENTRY(Name)	BLANK	M_ENTRY	(Name,PROF_/**/Name)#define	ENTRYC(Name)	BLANK	M_ENTRYC(Name,PROF_/**/Name)#define	EXIT(Name)	BLANK	M_EXIT	(Name,PROF_/**/Name)#define	EXITC(Name)	BLANK	M_EXITC	(Name,PROF_/**/Name)#if 0#define TEXT_SEGMENT \        .SPACE  $TEXT$          !\        .SUBSPA $CODE$#define RO_SEGMENT \        .SPACE  $TEXT$          !\        .SUBSPA $lit$#define DATA_SEGMENT \        .SPACE  $PRIVATE$          !\        .SUBSPA $data$#define BSS_SEGMENT \        .SPACE  $PRIVATE$          !\        .SUBSPA $bss$#else#define TEXT_SEGMENT .text#define RO_SEGMENT .rodata#define DATA_SEGMENT .data#define BSS_SEGMENT .bss#endif#ifdef PROF;; All four argument registers are saved into caller save registers; and restored after the call to _mcount.  This is possible because; the mcount routine does not modify them, so we can.  Mcount takes; 3 arguments; the first argument is the incoming 'rp', the second; is the starting address of the profiled routine, and the third is; the address of the PROF label (which is where mcount stores the; profile data).;#define M_ENTRY(name,prof)	\	TEXT_SEGMENT		!\        .label name		!\        .PROC			!\	.CALLINFO CALLER,SAVE_RP !\	.ENTRY			!\	stw	rp,-20(sp)	!\	ldo	48(sp),sp	!\	or	arg0,r0,r19	!\	or	arg1,r0,r20	!\	or	arg2,r0,r21	!\	or	arg3,r0,r22	!\	or	rp,r0,arg0	!\	ldil	L%name,r1	!\	ldo	R%name(r1),arg1	!\	addil	L%prof-$global$,dp	!\	bl	_mcount,rp	!\	ldo	R%prof-$global$(r1),arg2	!\	ldw	-68(sp),rp	!\	ldo	-48(sp),sp	!\	or	r19,r0,arg0	!\	or	r20,r0,arg1	!\	or	r21,r0,arg2	!\	or	r22,r0,arg3	!\#define M_ENTRYC(name,prof)	\	TEXT_SEGMENT		!\        .label name		!\        .PROC			!\	.CALLINFO CALLER,SAVE_RP !\	.ENTRY			!\	stw	rp,-20(sp)	!\	ldo	128(sp),sp	!\	or	arg0,r0,r19	!\	or	arg1,r0,r20	!\	or	arg2,r0,r21	!\	or	arg3,r0,r22	!\	or	rp,r0,arg0	!\	ldil	L%name,r1	!\	ldo	R%name(r1),arg1	!\	addil	L%prof-$global$,dp	!\	bl	_mcount,rp	!\	ldo	R%prof-$global$(r1),arg2	!\	ldw	-148(sp),rp	!\	or	r19,r0,arg0	!\	or	r20,r0,arg1	!\	or	r21,r0,arg2	!\	or	r22,r0,arg3	!\;; The HPUX profiler uses a word for each entrypoint to store the profiling; information.  The setup code passes the address to the _mcount routine.; The EXIT macro defines a label (PROF_foo), and a word of storage.;#define M_EXIT(name,prof)	\        bv,n	r0(rp)		!\	.EXIT			!\        .PROCEND		!\        .EXPORT	name,ENTRY	!\	DATA_SEGMENT		!\	.label prof		!\	.WORD	0		!\	.IMPORT	$global$,DATA	!\	.IMPORT	_mcount,CODE#define M_EXITC(name,prof)	\        bv	r0(rp)		!\        ldo	-128(sp),sp	!\	.EXIT			!\        .PROCEND		!\        .EXPORT	name,ENTRY	!\	DATA_SEGMENT		!\	.label prof		!\	.WORD	0		!\	.IMPORT	$global$,DATA	!\	.IMPORT	_mcount,CODE#else	/* NOT profiling */#define M_ENTRY(name,prof)	\	TEXT_SEGMENT		!\        .label name	!\        .PROC		!\        .CALLINFO	!\	.ENTRY#define M_ENTRYC(name,prof)	\	TEXT_SEGMENT		!\        .label name	!\        .PROC		!\        .CALLINFO CALLER,SAVE_RP	!\	.ENTRY		!\        stw     rp,-20(sp)	!\        ldo     128(sp),sp#define M_EXIT(name,prof)	\        bv,n	r0(rp)	!\	.EXIT		!\        .PROCEND	!\        .EXPORT	name,ENTRY#define M_EXITC(name,prof)	\        ldw	-148(sp),rp	!\        bv	r0(rp)	!\        ldo	-128(sp),sp	!\	.EXIT		!\        .PROCEND	!\        .EXPORT	name,ENTRY#define	ENTRY(Name)	BLANK	M_ENTRY	(Name,PROF_/**/Name)#define	ENTRYC(Name)	BLANK	M_ENTRYC(Name,PROF_/**/Name)#define	EXIT(Name)	BLANK	M_EXIT	(Name,PROF_/**/Name)#define	EXITC(Name)	BLANK	M_EXITC	(Name,PROF_/**/Name)#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -