X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/e5568f75972dfc723778653c11cb6b4dc825716a..39236c6e673c41db228275375ab7fdb0f837b292:/osfmk/profiling/i386/profile-md.h diff --git a/osfmk/profiling/i386/profile-md.h b/osfmk/profiling/i386/profile-md.h index 6b60d5ee2..86ed5b023 100644 --- a/osfmk/profiling/i386/profile-md.h +++ b/osfmk/profiling/i386/profile-md.h @@ -1,23 +1,29 @@ /* - * Copyright (c) 2000 Apple Computer, Inc. All rights reserved. + * Copyright (c) 2000-2012 Apple Inc. All rights reserved. * - * @APPLE_LICENSE_HEADER_START@ + * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ * - * The contents of this file constitute Original Code as defined in and - * are subject to the Apple Public Source License Version 1.1 (the - * "License"). You may not use this file except in compliance with the - * License. Please obtain a copy of the License at - * http://www.apple.com/publicsource and read it before using this file. + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apple Public Source License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. The rights granted to you under the License + * may not be used to create, or enable the creation or redistribution of, + * unlawful or unlicensed copies of an Apple operating system, or to + * circumvent, violate, or enable the circumvention or violation of, any + * terms of an Apple operating system software license agreement. * - * This Original Code and all software distributed under the License are - * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * Please obtain a copy of the License at + * http://www.opensource.apple.com/apsl/ and read it before using this file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the - * License for the specific language governing rights and limitations - * under the License. + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. * - * @APPLE_LICENSE_HEADER_END@ + * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ */ /* * @OSF_COPYRIGHT@ @@ -151,8 +157,13 @@ * Integer types used. */ -typedef long prof_ptrint_t; /* hold either pointer or signed int */ -typedef unsigned long prof_uptrint_t; /* hold either pointer or unsigned int */ +/* + * These hold either a pointer or a signed/unsigned int. + * They are 32 bit on i386 and 64 bit on x86_64. + */ +typedef long prof_ptrint_t; +typedef unsigned long prof_uptrint_t; + typedef long prof_lock_t; /* lock word type */ typedef unsigned char prof_flag_t; /* type for boolean flags */ @@ -160,48 +171,15 @@ typedef unsigned char prof_flag_t; /* type for boolean flags */ * Double precision counter. */ -typedef struct prof_cnt_t { - prof_uptrint_t low; /* low 32 bits of counter */ - prof_uptrint_t high; /* high 32 bits of counter */ -} prof_cnt_t; - -#if defined(__GNUC__) && !defined(lint) -#define PROF_CNT_INC(cnt) \ - __asm__("addl $1,%0; adcl $0,%1" \ - : "=g" ((cnt).low), "=g" ((cnt).high) \ - : "0" ((cnt).low), "1" ((cnt).high)) - -#define PROF_CNT_ADD(cnt,val) \ - __asm__("addl %2,%0; adcl $0,%1" \ - : "=g,r" ((cnt).low), "=g,r" ((cnt).high) \ - : "r,g" ((unsigned long)(val)), \ - "0,0" ((cnt).low), "1,1" ((cnt).high)) - -#define PROF_CNT_LADD(cnt,val) \ - __asm__("addl %2,%0; adcl %3,%1" \ - : "=g,r" ((cnt).low), "=g,r" ((cnt).high) \ - : "r,g" ((val).low), "r,g" ((val).high), \ - "0,0" ((cnt).low), "1,1" ((cnt).high)) - -#define PROF_CNT_SUB(cnt,val) \ - __asm__("subl %2,%0; sbbl $0,%1" \ - : "=g,r" ((cnt).low), "=g,r" ((cnt).high) \ - : "r,g" ((unsigned long)(val)), \ - "0,0" ((cnt).low), "1,1" ((cnt).high)) - -#define PROF_CNT_LSUB(cnt,val) \ - __asm__("subl %2,%0; sbbl %3,%1" \ - : "=g,r" ((cnt).low), "=g,r" ((cnt).high) \ - : "r,g" ((val).low), "r,g" ((val).high), \ - "0,0" ((cnt).low), "1,1" ((cnt).high)) - -#else -#define PROF_CNT_INC(cnt) ((++((cnt).low) == 0) ? ++((cnt).high) : 0) -#define PROF_CNT_ADD(cnt,val) (((((cnt).low + (val)) < (val)) ? ((cnt).high++) : 0), ((cnt).low += (val))) -#define PROF_CNT_LADD(cnt,val) (PROF_CNT_ADD(cnt,(val).low), (cnt).high += (val).high) -#define PROF_CNT_SUB(cnt,val) (((((cnt).low - (val)) > (cnt).low) ? ((cnt).high--) : 0), ((cnt).low -= (val))) -#define PROF_CNT_LSUB(cnt,val) (PROF_CNT_SUB(cnt,(val).low), (cnt).high -= (val).high) -#endif +/* These are 64 bit on both i386 and x86_64 */ +typedef unsigned long prof_cnt_t; + +/* x86_64 */ +#define PROF_CNT_INC(cnt) (cnt++) +#define PROF_CNT_ADD(cnt,val) (cnt+=val) +#define PROF_CNT_LADD(cnt,val) (cnt+=val) +#define PROF_CNT_SUB(cnt,val) (cnt-=val) +#define PROF_CNT_LSUB(cnt,val) (cnt-=val) #define PROF_ULONG_TO_CNT(cnt,val) (((cnt).high = 0), ((cnt).low = val)) #define PROF_CNT_OVERFLOW(cnt,high,low) (((high) = (cnt).high), ((low) = (cnt).low))