summaryrefslogtreecommitdiff
path: root/src/cmd/6l
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2013-07-16 16:23:11 -0400
committerRuss Cox <rsc@golang.org>2013-07-16 16:23:11 -0400
commitba306ff2abbc5c53e5799c2bafe893704400c0f1 (patch)
treeaffc5edcb81f63c541a419ae06c99b63d60fd2a9 /src/cmd/6l
parent76ac7db9b36a0ffbc96ea8c4b53a2c9689f74cb1 (diff)
downloadgo-ba306ff2abbc5c53e5799c2bafe893704400c0f1.tar.gz
cmd/5l, cmd/6l, cmd/8l: accept PCDATA instruction in input
The portable code in cmd/ld already knows how to process it, we just have to ignore it during code generation. R=ken2 CC=golang-dev https://codereview.appspot.com/11363043
Diffstat (limited to 'src/cmd/6l')
-rw-r--r--src/cmd/6l/optab.c14
-rw-r--r--src/cmd/6l/pass.c5
2 files changed, 16 insertions, 3 deletions
diff --git a/src/cmd/6l/optab.c b/src/cmd/6l/optab.c
index 3aa177b27..c354967b9 100644
--- a/src/cmd/6l/optab.c
+++ b/src/cmd/6l/optab.c
@@ -53,6 +53,16 @@ uchar ynop[] =
Yxr, Ynone, Zpseudo,1,
0
};
+uchar yfuncdata[] =
+{
+ Yi32, Ym, Zpseudo, 0,
+ 0
+};
+uchar ypcdata[] =
+{
+ Yi32, Yi32, Zpseudo, 0,
+ 0
+};
uchar yxorb[] =
{
Yi32, Yal, Zib_, 1,
@@ -1342,8 +1352,8 @@ Optab optab[] =
{ APCLMULQDQ, yxshuf, Pq, 0x3a,0x44,0 },
{ AUSEFIELD, ynop, Px, 0,0 },
- { AFUNCDATA, ynop, Px, 0,0 },
- { APCDATA, ynop, Px, 0,0 },
+ { AFUNCDATA, yfuncdata, Px, 0,0 },
+ { APCDATA, ypcdata, Px, 0,0 },
{ AEND },
0
diff --git a/src/cmd/6l/pass.c b/src/cmd/6l/pass.c
index 77defed39..644d898b9 100644
--- a/src/cmd/6l/pass.c
+++ b/src/cmd/6l/pass.c
@@ -589,7 +589,10 @@ dostkoff(void)
if(StackTop + textarg + PtrSize + autoffset + PtrSize + StackLimit >= StackMin)
moreconst1 = autoffset;
moreconst2 = textarg;
-
+ if(moreconst2 == 1) // special marker
+ moreconst2 = 0;
+ if((moreconst2&7) != 0)
+ diag("misaligned argument size in stack split");
// 4 varieties varieties (const1==0 cross const2==0)
// and 6 subvarieties of (const1==0 and const2!=0)
p = appendp(p);