align.c revision 3f54fd611f536639ec30dd53c48e5ec1897cc7d9
d58a25651be819045c8e77b89a2f563f0b8982b0vboxsync/***********************************************************************
d58a25651be819045c8e77b89a2f563f0b8982b0vboxsync* This software is part of the ast package *
d58a25651be819045c8e77b89a2f563f0b8982b0vboxsync* Copyright (c) 1985-2011 AT&T Intellectual Property *
d58a25651be819045c8e77b89a2f563f0b8982b0vboxsync* and is licensed under the *
d58a25651be819045c8e77b89a2f563f0b8982b0vboxsync* Eclipse Public License, Version 1.0 *
d58a25651be819045c8e77b89a2f563f0b8982b0vboxsync* by AT&T Intellectual Property *
d58a25651be819045c8e77b89a2f563f0b8982b0vboxsync* A copy of the License is available at *
d58a25651be819045c8e77b89a2f563f0b8982b0vboxsync* http://www.eclipse.org/org/documents/epl-v10.html *
d58a25651be819045c8e77b89a2f563f0b8982b0vboxsync* (with md5 checksum b35adb5213ca9657e911e9befb180842) *
d58a25651be819045c8e77b89a2f563f0b8982b0vboxsync* Information and Software Systems Research *
d58a25651be819045c8e77b89a2f563f0b8982b0vboxsync* AT&T Research *
d58a25651be819045c8e77b89a2f563f0b8982b0vboxsync* Florham Park NJ *
d58a25651be819045c8e77b89a2f563f0b8982b0vboxsync* Glenn Fowler <gsf@research.att.com> *
d58a25651be819045c8e77b89a2f563f0b8982b0vboxsync* David Korn <dgk@research.att.com> *
d58a25651be819045c8e77b89a2f563f0b8982b0vboxsync* Phong Vo <kpv@research.att.com> *
d58a25651be819045c8e77b89a2f563f0b8982b0vboxsync***********************************************************************/
d58a25651be819045c8e77b89a2f563f0b8982b0vboxsync * Glenn Fowler
d58a25651be819045c8e77b89a2f563f0b8982b0vboxsync * AT&T Bell Laboratories
d58a25651be819045c8e77b89a2f563f0b8982b0vboxsync * generate align features
d58a25651be819045c8e77b89a2f563f0b8982b0vboxsync * NOTE: two's complement binary integral representation assumed
d58a25651be819045c8e77b89a2f563f0b8982b0vboxsync char* (*u9)();
d58a25651be819045c8e77b89a2f563f0b8982b0vboxsyncstatic union _u_ u;
d58a25651be819045c8e77b89a2f563f0b8982b0vboxsyncstatic union _u_ v;
d58a25651be819045c8e77b89a2f563f0b8982b0vboxsync register int i;
d58a25651be819045c8e77b89a2f563f0b8982b0vboxsync register int j;
d58a25651be819045c8e77b89a2f563f0b8982b0vboxsync register int k;
d58a25651be819045c8e77b89a2f563f0b8982b0vboxsync unsigned long bit1;
d58a25651be819045c8e77b89a2f563f0b8982b0vboxsync unsigned long bit2;
d58a25651be819045c8e77b89a2f563f0b8982b0vboxsync unsigned long bits0;
d58a25651be819045c8e77b89a2f563f0b8982b0vboxsync unsigned long bits1;
d58a25651be819045c8e77b89a2f563f0b8982b0vboxsync unsigned long bits2;
d58a25651be819045c8e77b89a2f563f0b8982b0vboxsync for (j = 0; j < align0; j++)
d58a25651be819045c8e77b89a2f563f0b8982b0vboxsync for (i = 0; i < align0; i++)
d58a25651be819045c8e77b89a2f563f0b8982b0vboxsync printf("#define ALIGN_CHUNK %d\n", sizeof(char*) >= 4 ? 8192 : 1024);
d58a25651be819045c8e77b89a2f563f0b8982b0vboxsync printf("#define ALIGN_INTEGER(x) ((char*)(x)-(char*)0)\n");
d58a25651be819045c8e77b89a2f563f0b8982b0vboxsync printf("#define ALIGN_ROUND(x,y) ALIGN_POINTER(ALIGN_INTEGER((x)+(y)-1)&~((y)-1))\n");
d58a25651be819045c8e77b89a2f563f0b8982b0vboxsync printf("#define ALIGN_ROUND(x,y) ALIGN_POINTER(ALIGN_INTEGER(ALIGN_ALIGN(x)+(((y)+%d)/%d)-1)&~((((y)+%d)/%d)-1))\n", align0, align0, align0, align0);
d58a25651be819045c8e77b89a2f563f0b8982b0vboxsync printf("#define ALIGN_ALIGN(x) ALIGN_ALIGN2(x)\n");
d58a25651be819045c8e77b89a2f563f0b8982b0vboxsync printf("#define ALIGN_TRUNC(x) ALIGN_TRUNC2(x)\n");
d58a25651be819045c8e77b89a2f563f0b8982b0vboxsync printf("#define ALIGN_ALIGN(x) ALIGN_ALIGN1(x)\n");
d58a25651be819045c8e77b89a2f563f0b8982b0vboxsync printf("#define ALIGN_TRUNC(x) ALIGN_TRUNC1(x)\n");
d58a25651be819045c8e77b89a2f563f0b8982b0vboxsync printf("#define ALIGN_ALIGN(x) ALIGN_POINTER(x)\n");
d58a25651be819045c8e77b89a2f563f0b8982b0vboxsync printf("#define ALIGN_TRUNC(x) ALIGN_POINTER(x)\n");
d58a25651be819045c8e77b89a2f563f0b8982b0vboxsync printf("#define ALIGN_ALIGN1(x) ALIGN_ALIGN2(x)\n");
d58a25651be819045c8e77b89a2f563f0b8982b0vboxsync printf("#define ALIGN_TRUNC1(x) ALIGN_TRUNC2(x)\n");
d58a25651be819045c8e77b89a2f563f0b8982b0vboxsync printf("#define ALIGN_ALIGN1(x) ALIGN_TRUNC1((x)+%d)\n", align1 - 1);
d58a25651be819045c8e77b89a2f563f0b8982b0vboxsync printf("#define ALIGN_TRUNC1(x) ALIGN_POINTER(ALIGN_INTEGER((x)+%d)&0x%lx)\n", align1 - 1, ~(bits0|bits1));
d58a25651be819045c8e77b89a2f563f0b8982b0vboxsync printf("#define ALIGN_CLRBIT1(x) ALIGN_POINTER(ALIGN_INTEGER(x)&0xfffffffffffffffeULL)\n");
d58a25651be819045c8e77b89a2f563f0b8982b0vboxsync printf("#define ALIGN_CLRBIT1(x) ALIGN_POINTER(ALIGN_INTEGER(x)&0xfffffffe)\n");
d58a25651be819045c8e77b89a2f563f0b8982b0vboxsync printf("#define ALIGN_CLRBIT1(x) ALIGN_POINTER(ALIGN_INTEGER(x)&0x%lx)\n", ~bit1);
d58a25651be819045c8e77b89a2f563f0b8982b0vboxsync printf("#define ALIGN_SETBIT1(x) ALIGN_POINTER(ALIGN_INTEGER(x)|0x%lx)\n", bit1);
d58a25651be819045c8e77b89a2f563f0b8982b0vboxsync printf("#define ALIGN_TSTBIT1(x) ALIGN_POINTER(ALIGN_INTEGER(x)&0x%lx)\n", bit1);
d58a25651be819045c8e77b89a2f563f0b8982b0vboxsync printf("#define ALIGN_ALIGN2(x) ALIGN_TRUNC2((x)+15)\n");
d58a25651be819045c8e77b89a2f563f0b8982b0vboxsync printf("#define ALIGN_TRUNC2(x) ALIGN_POINTER(ALIGN_INTEGER(x)&0xfffffffffffffffeULL)\n");
d58a25651be819045c8e77b89a2f563f0b8982b0vboxsync printf("#define ALIGN_ALIGN2(x) ALIGN_TRUNC2((x)+7)\n");
d58a25651be819045c8e77b89a2f563f0b8982b0vboxsync printf("#define ALIGN_TRUNC2(x) ALIGN_POINTER(ALIGN_INTEGER(x)&0xfffffff8)\n");
d58a25651be819045c8e77b89a2f563f0b8982b0vboxsync printf("#define ALIGN_ALIGN2(x) ALIGN_TRUNC2((x)+%d)\n", align2 - 1);
d58a25651be819045c8e77b89a2f563f0b8982b0vboxsync printf("#define ALIGN_TRUNC2(x) ALIGN_POINTER(ALIGN_INTEGER(x)&0x%lx)\n", ~(bits0|bits1|bits2));
d58a25651be819045c8e77b89a2f563f0b8982b0vboxsync printf("#define ALIGN_CLRBIT2(x) ALIGN_POINTER(ALIGN_INTEGER(x)&0x%lx)\n", ~bit2);
d58a25651be819045c8e77b89a2f563f0b8982b0vboxsync printf("#define ALIGN_SETBIT2(x) ALIGN_POINTER(ALIGN_INTEGER(x)|0x%lx)\n", bit2);
d58a25651be819045c8e77b89a2f563f0b8982b0vboxsync printf("#define ALIGN_TSTBIT2(x) ALIGN_POINTER(ALIGN_INTEGER(x)&0x%lx)\n", bit2);