diff -r 3abb5264b586 FreeBSD/386/include/lib9.h --- a/FreeBSD/386/include/lib9.h Tue Jul 01 09:03:24 2014 +0100 +++ b/FreeBSD/386/include/lib9.h Tue Jul 15 00:14:21 2014 +0200 @@ -39,7 +39,7 @@ typedef unsigned char uchar; typedef signed char schar; typedef unsigned long ulong; -typedef unsigned short Rune; +typedef unsigned int Rune; typedef long long int vlong; typedef unsigned long long int uvlong; typedef unsigned int u32int; diff -r 3abb5264b586 Linux/386/bin/iyacc Binary file Linux/386/bin/iyacc has changed diff -r 3abb5264b586 Linux/386/bin/mk Binary file Linux/386/bin/mk has changed diff -r 3abb5264b586 Linux/386/include/lib9.h --- a/Linux/386/include/lib9.h Tue Jul 01 09:03:24 2014 +0100 +++ b/Linux/386/include/lib9.h Tue Jul 15 00:14:21 2014 +0200 @@ -37,7 +37,7 @@ typedef unsigned char uchar; typedef signed char schar; -typedef unsigned short Rune; +typedef unsigned int Rune; typedef long long int vlong; typedef unsigned long long int uvlong; typedef unsigned int u32int; diff -r 3abb5264b586 Linux/power/include/lib9.h --- a/Linux/power/include/lib9.h Tue Jul 01 09:03:24 2014 +0100 +++ b/Linux/power/include/lib9.h Tue Jul 15 00:14:21 2014 +0200 @@ -38,7 +38,7 @@ typedef unsigned char uchar; typedef signed char schar; -typedef unsigned short Rune; +typedef unsigned int Rune; typedef long long int vlong; typedef unsigned long long int uvlong; typedef unsigned int u32int; diff -r 3abb5264b586 MacOSX/386/include/lib9.h --- a/MacOSX/386/include/lib9.h Tue Jul 01 09:03:24 2014 +0100 +++ b/MacOSX/386/include/lib9.h Tue Jul 15 00:14:21 2014 +0200 @@ -34,7 +34,7 @@ typedef signed char schar; typedef long long vlong; typedef unsigned long long uvlong; -typedef ushort Rune; +typedef uint Rune; typedef unsigned int u32int; typedef uvlong u64int; diff -r 3abb5264b586 MacOSX/power/include/lib9.h --- a/MacOSX/power/include/lib9.h Tue Jul 01 09:03:24 2014 +0100 +++ b/MacOSX/power/include/lib9.h Tue Jul 15 00:14:21 2014 +0200 @@ -34,7 +34,7 @@ typedef signed char schar; typedef long long vlong; typedef unsigned long long uvlong; -typedef ushort Rune; +typedef uint Rune; typedef unsigned int u32int; typedef uvlong u64int; diff -r 3abb5264b586 NetBSD/386/include/lib9.h --- a/NetBSD/386/include/lib9.h Tue Jul 01 09:03:24 2014 +0100 +++ b/NetBSD/386/include/lib9.h Tue Jul 15 00:14:21 2014 +0200 @@ -49,7 +49,7 @@ typedef uintptr_t uintptr; -typedef unsigned short Rune; +typedef unsigned int Rune; typedef unsigned int mpdigit; /* for /sys/include/mp.h */ diff -r 3abb5264b586 Nt/386/include/lib9.h --- a/Nt/386/include/lib9.h Tue Jul 01 09:03:24 2014 +0100 +++ b/Nt/386/include/lib9.h Tue Jul 15 00:14:21 2014 +0200 @@ -45,7 +45,7 @@ typedef unsigned long ulong; typedef signed char schar; typedef unsigned short ushort; -typedef unsigned short Rune; +typedef unsigned int Rune; typedef __int64 vlong; typedef unsigned __int64 uvlong; typedef unsigned int u32int; diff -r 3abb5264b586 Solaris/sparc/include/lib9.h --- a/Solaris/sparc/include/lib9.h Tue Jul 01 09:03:24 2014 +0100 +++ b/Solaris/sparc/include/lib9.h Tue Jul 15 00:14:21 2014 +0200 @@ -29,7 +29,7 @@ typedef unsigned long ulong; typedef signed char schar; typedef unsigned short ushort; -typedef unsigned short Rune; +typedef unsigned int Rune; typedef long long int vlong; typedef unsigned long long int uvlong; typedef unsigned int u32int; diff -r 3abb5264b586 src/cmd/5c/swt.c --- a/src/cmd/5c/swt.c Tue Jul 01 09:03:24 2014 +0100 +++ b/src/cmd/5c/swt.c Tue Jul 15 00:14:21 2014 +0200 @@ -230,28 +230,29 @@ } long -outlstring(ushort *s, long n) +outlstring(TRune *s, long n) { - char buf[2]; - int c; + char buf[sizeof(TRune)]; + uint c; + int i; long r; if(suppress) return nstring; - while(nstring & 1) + while(nstring & (sizeof(TRune)-1)) outstring("", 1); r = nstring; while(n > 0) { c = *s++; if(align(0, types[TCHAR], Aarg1)) { - buf[0] = c>>8; - buf[1] = c; + for(i = 0; i < sizeof(TRune); i++) + buf[i] = c>>(8*(sizeof(TRune) - i - 1)); } else { - buf[0] = c; - buf[1] = c>>8; + for(i = 0; i < sizeof(TRune); i++) + buf[i] = c>>(8*i); } - outstring(buf, 2); - n -= sizeof(ushort); + outstring(buf, sizeof(TRune)); + n -= sizeof(TRune); } return r; } diff -r 3abb5264b586 src/cmd/8c/gc.h --- a/src/cmd/8c/gc.h Tue Jul 01 09:03:24 2014 +0100 +++ b/src/cmd/8c/gc.h Tue Jul 15 00:14:21 2014 +0200 @@ -159,6 +159,7 @@ EXTERN int reg[D_NONE]; EXTERN long exregoffset; EXTERN long exfregoffset; +EXTERN int suppress; #define BLOAD(r) band(bnot(r->refbehind), r->refahead) #define BSTORE(r) band(bnot(r->calbehind), r->calahead) diff -r 3abb5264b586 src/cmd/8c/swt.c --- a/src/cmd/8c/swt.c Tue Jul 01 09:03:24 2014 +0100 +++ b/src/cmd/8c/swt.c Tue Jul 15 00:14:21 2014 +0200 @@ -190,28 +190,29 @@ } long -outlstring(ushort *s, long n) +outlstring(TRune *s, long n) { - char buf[2]; - int c; + char buf[sizeof(TRune)]; + uint c; + int i; long r; if(suppress) return nstring; - while(nstring & 1) + while(nstring & (sizeof(TRune)-1)) outstring("", 1); r = nstring; while(n > 0) { c = *s++; if(align(0, types[TCHAR], Aarg1)) { - buf[0] = c>>8; - buf[1] = c; + for(i = 0; i < sizeof(TRune); i++) + buf[i] = c>>(8*(sizeof(TRune) - i - 1)); } else { - buf[0] = c; - buf[1] = c>>8; + for(i = 0; i < sizeof(TRune); i++) + buf[i] = c>>(8*i); } - outstring(buf, 2); - n -= sizeof(ushort); + outstring(buf, sizeof(TRune)); + n -= sizeof(TRune); } return r; } diff -r 3abb5264b586 src/cmd/cc/cc.h --- a/src/cmd/cc/cc.h Tue Jul 01 09:03:24 2014 +0100 +++ b/src/cmd/cc/cc.h Tue Jul 15 00:14:21 2014 +0200 @@ -17,6 +17,8 @@ typedef struct Init Init; typedef struct Bits Bits; +typedef Rune TRune; /* target system type */ + #define NHUNK 50000L #define BUFSIZ 8192 #define NSYMB 500 @@ -48,7 +50,7 @@ double fconst; /* fp constant */ vlong vconst; /* non fp const */ char* cstring; /* character string */ - ushort* rstring; /* rune string */ + TRune* rstring; /* rune string */ Sym* sym; Type* type; @@ -333,6 +335,9 @@ TFILE, TOLD, NALLTYPES, + + /* adapt size of Rune to target system's size */ + TRUNE = sizeof(TRune)==4? TUINT: TUSHORT, }; enum { @@ -731,7 +736,7 @@ void gextern(Sym*, Node*, long, long); void ginit(void); long outstring(char*, long); -long outlstring(ushort*, long); +long outlstring(TRune*, long); void sextern(Sym*, Node*, long, long); void xcom(Node*); long exreg(Type*); diff -r 3abb5264b586 src/cmd/cc/cc.y --- a/src/cmd/cc/cc.y Tue Jul 01 09:03:24 2014 +0100 +++ b/src/cmd/cc/cc.y Tue Jul 15 00:14:21 2014 +0200 @@ -847,9 +847,9 @@ LLSTRING { $$ = new(OLSTRING, Z, Z); - $$->type = typ(TARRAY, types[TUSHORT]); - $$->type->width = $1.l + sizeof(ushort); - $$->rstring = (ushort*)$1.s; + $$->type = typ(TARRAY, types[TRUNE]); + $$->type->width = $1.l + sizeof(TRune); + $$->rstring = (TRune*)$1.s; $$->sym = symstring; $$->etype = TARRAY; $$->class = CSTATIC; @@ -859,16 +859,16 @@ char *s; int n; - n = $1->type->width - sizeof(ushort); + n = $1->type->width - sizeof(TRune); s = alloc(n+$2.l+MAXALIGN); memcpy(s, $1->rstring, n); memcpy(s+n, $2.s, $2.l); - *(ushort*)(s+n+$2.l) = 0; + *(TRune*)(s+n+$2.l) = 0; $$ = $1; $$->type->width += $2.l; - $$->rstring = (ushort*)s; + $$->rstring = (TRune*)s; } zelist: diff -r 3abb5264b586 src/cmd/cc/com.c --- a/src/cmd/cc/com.c Tue Jul 01 09:03:24 2014 +0100 +++ b/src/cmd/cc/com.c Tue Jul 15 00:14:21 2014 +0200 @@ -54,6 +54,7 @@ Node *l, *r; Type *t; int o; + static TRune zer; if(n == Z) { diag(Z, "Z in tcom"); @@ -613,10 +614,10 @@ break; case OLSTRING: - if(n->type->link != types[TUSHORT]) { + if(n->type->link != types[TRUNE]) { o = outstring(0, 0); while(o & 3) { - outlstring(L"", sizeof(ushort)); + outlstring(&zer, sizeof(TRune)); o = outlstring(0, 0); } } diff -r 3abb5264b586 src/cmd/cc/sub.c --- a/src/cmd/cc/sub.c Tue Jul 01 09:03:24 2014 +0100 +++ b/src/cmd/cc/sub.c Tue Jul 15 00:14:21 2014 +0200 @@ -80,7 +80,10 @@ break; case OLSTRING: - print(" \"%S\"", n->rstring); + if(sizeof(TRune) == sizeof(Rune)) + print(" \"%S\"", (Rune*)n->rstring); + else + print(" \"...\""); i = 0; break; diff -r 3abb5264b586 src/cmd/kc/gc.h --- a/src/cmd/kc/gc.h Tue Jul 01 09:03:24 2014 +0100 +++ b/src/cmd/kc/gc.h Tue Jul 15 00:14:21 2014 +0200 @@ -156,6 +156,7 @@ EXTERN char reg[NREG+NREG]; EXTERN long exregoffset; EXTERN long exfregoffset; +EXTERN int suppress; #define BLOAD(r) band(bnot(r->refbehind), r->refahead) #define BSTORE(r) band(bnot(r->calbehind), r->calahead) diff -r 3abb5264b586 src/cmd/kc/swt.c --- a/src/cmd/kc/swt.c Tue Jul 01 09:03:24 2014 +0100 +++ b/src/cmd/kc/swt.c Tue Jul 15 00:14:21 2014 +0200 @@ -199,26 +199,29 @@ } long -outlstring(ushort *s, long n) +outlstring(TRune *s, long n) { - char buf[2]; - int c; + char buf[sizeof(TRune)]; + uint c; + int i; long r; - while(nstring & 1) + if(suppress) + return nstring; + while(nstring & (sizeof(TRune)-1)) outstring("", 1); r = nstring; while(n > 0) { c = *s++; if(align(0, types[TCHAR], Aarg1)) { - buf[0] = c>>8; - buf[1] = c; + for(i = 0; i < sizeof(TRune); i++) + buf[i] = c>>(8*(sizeof(TRune) - i - 1)); } else { - buf[0] = c; - buf[1] = c>>8; + for(i = 0; i < sizeof(TRune); i++) + buf[i] = c>>(8*i); } - outstring(buf, 2); - n -= sizeof(ushort); + outstring(buf, sizeof(TRune)); + n -= sizeof(TRune); } return r; } diff -r 3abb5264b586 src/cmd/qc/gc.h --- a/src/cmd/qc/gc.h Tue Jul 01 09:03:24 2014 +0100 +++ b/src/cmd/qc/gc.h Tue Jul 15 00:14:21 2014 +0200 @@ -157,6 +157,7 @@ EXTERN int reg[NREG+NREG]; EXTERN long exregoffset; EXTERN long exfregoffset; +EXTERN int suppress; #define BLOAD(r) band(bnot(r->refbehind), r->refahead) #define BSTORE(r) band(bnot(r->calbehind), r->calahead) diff -r 3abb5264b586 src/cmd/qc/swt.c --- a/src/cmd/qc/swt.c Tue Jul 01 09:03:24 2014 +0100 +++ b/src/cmd/qc/swt.c Tue Jul 15 00:14:21 2014 +0200 @@ -201,28 +201,29 @@ } long -outlstring(ushort *s, long n) +outlstring(TRune *s, long n) { - char buf[2]; - int c; + char buf[sizeof(TRune)]; + uint c; + int i; long r; if(suppress) return nstring; - while(nstring & 1) + while(nstring & (sizeof(TRune)-1)) outstring("", 1); r = nstring; while(n > 0) { c = *s++; if(align(0, types[TCHAR], Aarg1)) { - buf[0] = c>>8; - buf[1] = c; + for(i = 0; i < sizeof(TRune); i++) + buf[i] = c>>(8*(sizeof(TRune) - i - 1)); } else { - buf[0] = c; - buf[1] = c>>8; + for(i = 0; i < sizeof(TRune); i++) + buf[i] = c>>(8*i); } - outstring(buf, 2); - n -= sizeof(ushort); + outstring(buf, sizeof(TRune)); + n -= sizeof(TRune); } return r; } diff -r 3abb5264b586 src/cmd/tc/swt.c --- a/src/cmd/tc/swt.c Tue Jul 01 09:03:24 2014 +0100 +++ b/src/cmd/tc/swt.c Tue Jul 15 00:14:21 2014 +0200 @@ -196,28 +196,29 @@ } long -outlstring(ushort *s, long n) +outlstring(TRune *s, long n) { - char buf[2]; - int c; + char buf[sizeof(TRune)]; + uint c; + int i; long r; if(suppress) return nstring; - while(nstring & 1) + while(nstring & (sizeof(TRune)-1)) outstring("", 1); r = nstring; while(n > 0) { c = *s++; if(align(0, types[TCHAR], Aarg1)) { - buf[0] = c>>8; - buf[1] = c; + for(i = 0; i < sizeof(TRune); i++) + buf[i] = c>>(8*(sizeof(TRune) - i - 1)); } else { - buf[0] = c; - buf[1] = c>>8; + for(i = 0; i < sizeof(TRune); i++) + buf[i] = c>>(8*i); } - outstring(buf, 2); - n -= sizeof(ushort); + outstring(buf, sizeof(TRune)); + n -= sizeof(TRune); } return r; } diff -r 3abb5264b586 src/cmd/vc/gc.h --- a/src/cmd/vc/gc.h Tue Jul 01 09:03:24 2014 +0100 +++ b/src/cmd/vc/gc.h Tue Jul 15 00:14:21 2014 +0200 @@ -157,6 +157,7 @@ EXTERN int reg[NREG+NREG]; EXTERN long exregoffset; EXTERN long exfregoffset; +EXTERN int suppress; #define BLOAD(r) band(bnot(r->refbehind), r->refahead) #define BSTORE(r) band(bnot(r->calbehind), r->calahead) diff -r 3abb5264b586 src/cmd/vc/swt.c --- a/src/cmd/vc/swt.c Tue Jul 01 09:03:24 2014 +0100 +++ b/src/cmd/vc/swt.c Tue Jul 15 00:14:21 2014 +0200 @@ -198,26 +198,29 @@ } long -outlstring(ushort *s, long n) +outlstring(TRune *s, long n) { - char buf[2]; - int c; + char buf[sizeof(TRune)]; + uint c; + int i; long r; - while(nstring & 1) + if(suppress) + return nstring; + while(nstring & (sizeof(TRune)-1)) outstring("", 1); r = nstring; while(n > 0) { c = *s++; if(align(0, types[TCHAR], Aarg1)) { - buf[0] = c>>8; - buf[1] = c; + for(i = 0; i < sizeof(TRune); i++) + buf[i] = c>>(8*(sizeof(TRune) - i - 1)); } else { - buf[0] = c; - buf[1] = c>>8; + for(i = 0; i < sizeof(TRune); i++) + buf[i] = c>>(8*i); } - outstring(buf, 2); - n -= sizeof(ushort); + outstring(buf, sizeof(TRune)); + n -= sizeof(TRune); } return r; }