summaryrefslogtreecommitdiff
path: root/src/cmd/cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/cc')
-rw-r--r--src/cmd/cc/cc.h1
-rw-r--r--src/cmd/cc/com.c5
-rw-r--r--src/cmd/cc/sub.c1
3 files changed, 7 insertions, 0 deletions
diff --git a/src/cmd/cc/cc.h b/src/cmd/cc/cc.h
index 3b13126df..42341a70c 100644
--- a/src/cmd/cc/cc.h
+++ b/src/cmd/cc/cc.h
@@ -262,6 +262,7 @@ enum
ODWHILE,
OENUM,
OEQ,
+ OEXREG,
OFOR,
OFUNC,
OGE,
diff --git a/src/cmd/cc/com.c b/src/cmd/cc/com.c
index 5ee38e882..af2509c5f 100644
--- a/src/cmd/cc/com.c
+++ b/src/cmd/cc/com.c
@@ -638,6 +638,11 @@ tcomo(Node *n, int f)
n->addable = 1;
if(n->class == CEXREG) {
n->op = OREGISTER;
+ // on 386, "extern register" generates
+ // memory references relative to the
+ // fs segment.
+ if(thechar == '8') // [sic]
+ n->op = OEXREG;
n->reg = n->sym->offset;
n->xoffset = 0;
break;
diff --git a/src/cmd/cc/sub.c b/src/cmd/cc/sub.c
index cad5eda72..335d30bfb 100644
--- a/src/cmd/cc/sub.c
+++ b/src/cmd/cc/sub.c
@@ -1460,6 +1460,7 @@ Init onamesinit[] =
ODWHILE, 0, "DWHILE",
OENUM, 0, "ENUM",
OEQ, 0, "EQ",
+ OEXREG, 0, "EXREG",
OFOR, 0, "FOR",
OFUNC, 0, "FUNC",
OGE, 0, "GE",