diff options
Diffstat (limited to 'usr/src/lib/libast/common/features/align.c')
-rw-r--r-- | usr/src/lib/libast/common/features/align.c | 167 |
1 files changed, 0 insertions, 167 deletions
diff --git a/usr/src/lib/libast/common/features/align.c b/usr/src/lib/libast/common/features/align.c deleted file mode 100644 index 77adf4baac..0000000000 --- a/usr/src/lib/libast/common/features/align.c +++ /dev/null @@ -1,167 +0,0 @@ -/*********************************************************************** -* * -* This software is part of the ast package * -* Copyright (c) 1985-2010 AT&T Intellectual Property * -* and is licensed under the * -* Common Public License, Version 1.0 * -* by AT&T Intellectual Property * -* * -* A copy of the License is available at * -* http://www.opensource.org/licenses/cpl1.0.txt * -* (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) * -* * -* Information and Software Systems Research * -* AT&T Research * -* Florham Park NJ * -* * -* Glenn Fowler <gsf@research.att.com> * -* David Korn <dgk@research.att.com> * -* Phong Vo <kpv@research.att.com> * -* * -***********************************************************************/ -#pragma prototyped -/* - * Glenn Fowler - * AT&T Bell Laboratories - * - * generate align features - * - * NOTE: two's complement binary integral representation assumed - */ - -#include "FEATURE/common" - -#include <setjmp.h> - -union _u_ -{ - long u1; - char* u2; - double u3; - char u4[1024]; - intmax_t u5; - uintmax_t u6; - _ast_fltmax_t u7; - void* u8; - char* (*u9)(); - jmp_buf u10; -}; - -struct _s_ -{ - char s1; - union _u_ s2; -}; - -#define roundof(x,y) (((x)+((y)-1))&~((y)-1)) - -static union _u_ u; -static union _u_ v; - -int -main() -{ - register int i; - register int j; - register int k; - - int align0; - int align1; - int align2; - unsigned long bit1; - unsigned long bit2; - unsigned long bits0; - unsigned long bits1; - unsigned long bits2; - - u.u2 = u.u4; - v.u2 = u.u2 + 1; - bit1 = u.u1 ^ v.u1; - v.u2 = u.u2 + 2; - bit2 = u.u1 ^ v.u1; - align0 = sizeof(struct _s_) - sizeof(union _u_); - bits0 = 0; - k = 0; - for (j = 0; j < align0; j++) - { - u.u2 = u.u4 + j; - bits1 = 0; - for (i = 0; i < align0; i++) - { - v.u2 = u.u2 + i; - bits1 |= u.u1 ^ v.u1; - } - if (!bits0 || bits1 < bits0) - { - bits0 = bits1; - k = j; - } - } - align1 = roundof(align0, 2); - u.u2 = u.u4 + k; - for (bits1 = bits0; i < align1; i++) - { - v.u2 = u.u2 + i; - bits1 |= u.u1 ^ v.u1; - } - align2 = roundof(align0, 4); - for (bits2 = bits1; i < align2; i++) - { - v.u2 = u.u2 + i; - bits2 |= u.u1 ^ v.u1; - } - printf("typedef unsigned %s ALIGN_INTEGRAL;\n", sizeof(char*) >= sizeof(long) ? "long" : sizeof(char*) >= sizeof(int) ? "int" : "short"); - printf("\n"); - printf("#define ALIGN_CHUNK %d\n", sizeof(char*) >= 4 ? 8192 : 1024); - printf("#define ALIGN_INTEGRAL %s\n", sizeof(char*) >= sizeof(long) ? "long" : sizeof(char*) >= sizeof(int) ? "int" : "short"); - printf("#define ALIGN_INTEGER(x) ((ALIGN_INTEGRAL)(x))\n"); - printf("#define ALIGN_POINTER(x) ((char*)(x))\n"); - if (bits2 == (align2 - 1)) printf("#define ALIGN_ROUND(x,y) ALIGN_POINTER(ALIGN_INTEGER((x)+(y)-1)&~((y)-1))\n"); - else 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); - printf("\n"); - if (align0 == align2) - { - printf("#define ALIGN_BOUND ALIGN_BOUND2\n"); - printf("#define ALIGN_ALIGN(x) ALIGN_ALIGN2(x)\n"); - printf("#define ALIGN_TRUNC(x) ALIGN_TRUNC2(x)\n"); - } - else if (align0 == align1) - { - printf("#define ALIGN_BOUND ALIGN_BOUND1\n"); - printf("#define ALIGN_ALIGN(x) ALIGN_ALIGN1(x)\n"); - printf("#define ALIGN_TRUNC(x) ALIGN_TRUNC1(x)\n"); - } - else - { - printf("#define ALIGN_BOUND 1\n"); - printf("#define ALIGN_ALIGN(x) ALIGN_POINTER(x)\n"); - printf("#define ALIGN_TRUNC(x) ALIGN_POINTER(x)\n"); - } - printf("\n"); - printf("#define ALIGN_BIT1 0x%lx\n", bit1); - if (align1 == align2) - { - printf("#define ALIGN_BOUND1 ALIGN_BOUND2\n"); - printf("#define ALIGN_ALIGN1(x) ALIGN_ALIGN2(x)\n"); - printf("#define ALIGN_TRUNC1(x) ALIGN_TRUNC2(x)\n"); - } - else - { - printf("#define ALIGN_BOUND1 %d\n", align1); - printf("#define ALIGN_ALIGN1(x) ALIGN_TRUNC1((x)+%d)\n", align1 - 1); - printf("#define ALIGN_TRUNC1(x) ALIGN_POINTER(ALIGN_INTEGER((x)+%d)&0x%lx)\n", align1 - 1, ~(bits0|bits1)); - } - printf("#define ALIGN_CLRBIT1(x) ALIGN_POINTER(ALIGN_INTEGER(x)&0x%lx)\n", ~bit1); - printf("#define ALIGN_SETBIT1(x) ALIGN_POINTER(ALIGN_INTEGER(x)|0x%lx)\n", bit1); - printf("#define ALIGN_TSTBIT1(x) ALIGN_POINTER(ALIGN_INTEGER(x)&0x%lx)\n", bit1); - printf("\n"); - printf("#define ALIGN_BIT2 0x%lx\n", bit2); - printf("#define ALIGN_BOUND2 %d\n", align2); - printf("#define ALIGN_ALIGN2(x) ALIGN_TRUNC2((x)+%d)\n", align2 - 1); - printf("#define ALIGN_TRUNC2(x) ALIGN_POINTER(ALIGN_INTEGER(x)&0x%lx)\n", ~(bits0|bits1|bits2)); - printf("#define ALIGN_CLRBIT2(x) ALIGN_POINTER(ALIGN_INTEGER(x)&0x%lx)\n", ~bit2); - printf("#define ALIGN_SETBIT2(x) ALIGN_POINTER(ALIGN_INTEGER(x)|0x%lx)\n", bit2); - printf("#define ALIGN_TSTBIT2(x) ALIGN_POINTER(ALIGN_INTEGER(x)&0x%lx)\n", bit2); - printf("\n"); - return 0; -} |