aboutsummaryrefslogtreecommitdiff
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
commit567818224edce362fa040ee89e9597982f2bcdf6 (patch)
tree77605ec3fd6e6b2e54343aae26f72e63446616a9 /src/cmd/6l
parent8fb6c3ac25f077f5207215dc4868014a29e61759 (diff)
downloadgo-567818224edce362fa040ee89e9597982f2bcdf6.tar.xz
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://golang.org/cl/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 3aa177b270..c354967b98 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 77defed394..644d898b9c 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);