home *** CD-ROM | disk | FTP | other *** search
- Apply this in the genser directory.
-
- J
-
- ===================================================================
- RCS file: /wrk/cvsroot/genser/coder.h,v
- retrieving revision 1.2
- diff -u -r1.2 coder.h
- --- 1.2 1994/04/08 16:48:38
- +++ coder.h 1994/08/22 18:16:38
- @@ -4,7 +4,7 @@
- #define __CODER_H_SEEN__
-
- #ifndef __GNUC__
- -#define __inline__
- +#define __inline__ /* */
- #endif
-
- #ifndef __cplusplus
- @@ -21,6 +21,8 @@
- typedef unsigned short Ushort;
- typedef unsigned long Ulong;
- typedef unsigned long Uint;
- +typedef unsigned long long Ulonglong;
- +typedef long long longlong;
-
- /** char **/
- __inline__ static unsigned char *encode_char(const char *ch, unsigned char *buf)
- @@ -146,6 +148,71 @@
- return 4;
- }
-
- +/** long long */
- +__inline__ static unsigned char *encode_longlong(const long long *l,
- + unsigned char *buf)
- +{
- + register long long lv = *l;
- +
- + buf[0] = (lv >> 56) & 0xff;
- + buf[1] = (lv >> 48) & 0xff;
- + buf[2] = (lv >> 40) & 0xff;
- + buf[3] = (lv >> 32) & 0xff;
- + buf[4] = (lv >> 24) & 0xff;
- + buf[5] = (lv >> 16) & 0xff;
- + buf[6] = (lv >> 8) & 0xff;
- + buf[7] = lv & 0xff;
- +
- + return buf+8;
- +}
- +
- +__inline__ static unsigned char *decode_longlong(long long *l,
- + unsigned char *buf)
- +{
- +#define BUF(x) ((long long)(buf[x]))
- + *l = (BUF(0) << 56)|(BUF(1) << 48)|(BUF(2) << 40)|(BUF(3) << 32)|
- + (BUF(4) << 24)|(BUF(5) << 16)|(BUF(6) << 8)|BUF(7);
- +#undef BUF
- + return buf+8;
- +}
- +
- +__inline__ static unsigned int sizeof_longlong(const long long *c)
- +{
- + return 8;
- +}
- +
- +/** unsigned long long */
- +__inline__ static unsigned char *encode_Ulonglong(const unsigned long long *l,
- + unsigned char *buf)
- +{
- + register unsigned long long lv = *l;
- +
- + buf[0] = (lv >> 56) & 0xff;
- + buf[1] = (lv >> 48) & 0xff;
- + buf[2] = (lv >> 40) & 0xff;
- + buf[3] = (lv >> 32) & 0xff;
- + buf[4] = (lv >> 24) & 0xff;
- + buf[5] = (lv >> 16) & 0xff;
- + buf[6] = (lv >> 8) & 0xff;
- + buf[7] = lv & 0xff;
- +
- + return buf+8;
- +}
- +
- +__inline__ static unsigned char *decode_Ulonglong(unsigned long long *l,
- + unsigned char *buf)
- +{
- +#define BUF(x) ((unsigned long long)(buf[x]))
- + *l = (BUF(0) << 56)|(BUF(1) << 48)|(BUF(2) << 40)|(BUF(3) << 32)|
- + (BUF(4) << 24)|(BUF(5) << 16)|(BUF(6) << 8)|BUF(7);
- +#undef BUF
- + return buf+8;
- +}
- +
- +__inline__ static unsigned int sizeof_Ulonglong(const unsigned long long *c)
- +{
- + return 8;
- +}
-
- /** void **/
- __inline__ static unsigned char *encode_void(const void *v, unsigned char *buf)
- ===================================================================
- RCS file: /wrk/cvsroot/genser/genhdr.c,v
- retrieving revision 1.5
- diff -u -r1.5 genhdr.c
- --- 1.5 1994/05/26 06:57:57
- +++ genhdr.c 1994/08/23 07:04:51
- @@ -43,6 +43,7 @@
- case Char: str = "char"; break;
- case Short: str = "short"; break;
- case Long: str = "long"; break;
- + case LongLong: str = "long long"; break;
- case Float: str = "float"; break;
- case Double: str = "double"; break;
- default: str = "???"; break;
- ===================================================================
- RCS file: /wrk/cvsroot/genser/parser.y,v
- retrieving revision 1.1
- diff -u -r1.1 parser.y
- --- 1.1 1994/04/07 11:11:23
- +++ parser.y 1994/08/23 07:21:05
- @@ -179,34 +179,41 @@
- /* Cruftyness to handle "long int" and "long double" */
- qual_type: TYPE TYPE
- {
- + Type *t1 = realtype($1);
- + Type *t2 = realtype($2);
- $$ = NULL;
-
- - if ($1 != long_type && $1 != short_type)
- + if (t1 != long_type && t1 != short_type)
- {
- yyerror("Can only qualify with \"long\" or \"short\"");
- YYERROR;
- }
- - else if ($2->tclass != Scalar)
- + else if (t2->tclass != Scalar)
- {
- yyerror("Can only qualify scalar types");
- YYERROR;
- }
- else
- {
- - switch($2->i.scalar_i.size)
- + switch(t2->i.scalar_i.size)
- {
- case Float:
- - if ($1 == long_type)
- + if (t1 == long_type)
- {
- $$ = double_type;
- break;
- }
- case Long:
- - if ($1 == short_type)
- + if (t1 == short_type)
- {
- $$ = short_type;
- break;
- }
- + if (t1 == long_type)
- + {
- + $$ = longlong_type;
- + break;
- + }
-
- default: $$ = $2;
- }
- @@ -241,6 +248,7 @@
- case Char: t = Uchar_type; break;
- case Short: t = Ushort_type; break;
- case Long: t = Ulong_type; break;
- + case LongLong: t = Ulonglong_type; break;
- default:
- yyerror("only integral types can be unsigned");
- YYERROR;
- ===================================================================
- RCS file: /wrk/cvsroot/genser/symtab.c,v
- retrieving revision 1.1
- diff -u -r1.1 symtab.c
- --- 1.1 1994/04/07 11:11:24
- +++ symtab.c 1994/08/23 07:19:47
- @@ -179,9 +179,11 @@
- return t;
- }
-
- +Type *Ulonglong_type;
- Type *Ulong_type;
- Type *Ushort_type;
- Type *Uchar_type;
- +Type *longlong_type;
- Type *long_type;
- Type *short_type;
- Type *char_type;
- @@ -217,6 +219,11 @@
- t = Ulong_type = mkscalar(Long, 1);
- t->nocode = 1;
-
- + t = longlong_type = mkscalar(LongLong, 0);
- + t->nocode = t->nohdr = 1;
- + t = Ulonglong_type = mkscalar(LongLong, 1);
- + t->nocode = 1;
- +
- t = float_type = mkscalar(Float, 0);
- t->nocode = t->nohdr = 1;
- t = double_type = mkscalar(Double, 1);
- @@ -231,6 +238,8 @@
- v->type->nocode = v->type->nohdr = 1;
- global = add(global, v = mktypedef(long_type, "long"));
- v->type->nocode = v->type->nohdr = 1;
- + global = add(global, v = mktypedef(longlong_type, "longlong"));
- + v->type->nocode = v->type->nohdr = 1;
-
- global = add(global, v = mktypedef(float_type, "float"));
- v->type->nocode = v->type->nohdr = 1;
- @@ -239,17 +248,19 @@
-
- global = add(global, v = mktypedef(void_type, "void"));
- v->type->nohdr = v->type->nocode = v->type->norep = 1;
- -
- +
- global = add(global, v = mktypedef(Uchar_type, "Uchar"));
- v->type->nocode = v->type->nohdr = 1;
- global = add(global, v = mktypedef(Ushort_type, "Ushort"));
- v->type->nocode = v->type->nohdr = 1;
- global = add(global, v = mktypedef(Ulong_type, "Ulong"));
- v->type->nocode = v->type->nohdr = 1;
- + global = add(global, v = mktypedef(Ulonglong_type, "Ulonglong"));
- + v->type->nocode = v->type->nohdr = 1;
- + global = add(global, v=mktypedef(Ulong_type, "Uint"));
- + v->type->demand = v->type->nohdr = v->type->indir = 1;
-
- global = add(global, v=mktypedef(long_type, "int"));
- - v->type->demand = v->type->nohdr = v->type->indir = 1;
- - global = add(global, v=mktypedef(Ulong_type, "Uint"));
- v->type->demand = v->type->nohdr = v->type->indir = 1;
- }
-
- ===================================================================
- RCS file: /wrk/cvsroot/genser/symtab.h,v
- retrieving revision 1.1
- diff -u -r1.1 symtab.h
- --- 1.1 1994/04/07 11:11:24
- +++ symtab.h 1994/08/22 17:09:37
- @@ -22,6 +22,7 @@
- Char,
- Short,
- Long,
- + LongLong,
- Float,
- Double
- };
- @@ -95,9 +96,11 @@
- Type *realtype(Type *);
-
- /* Standard types */
- +extern Type *Ulonglong_type;
- extern Type *Ulong_type;
- extern Type *Ushort_type;
- extern Type *Uchar_type;
- +extern Type *longlong_type;
- extern Type *long_type;
- extern Type *short_type;
- extern Type *char_type;
-
-