X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/2d21ac55c334faf3a56e5634905ed6987fc787d4..39236c6e673c41db228275375ab7fdb0f837b292:/osfmk/profiling/i386/profile-md.h diff --git a/osfmk/profiling/i386/profile-md.h b/osfmk/profiling/i386/profile-md.h index bbc8d2df8..86ed5b023 100644 --- a/osfmk/profiling/i386/profile-md.h +++ b/osfmk/profiling/i386/profile-md.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000 Apple Computer, Inc. All rights reserved. + * Copyright (c) 2000-2012 Apple Inc. All rights reserved. * * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ * @@ -157,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 */ @@ -166,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))