1
0
mirror of https://github.com/golang/go synced 2024-11-26 10:08:23 -07:00

cmd/5l, cmd/6l, cmd/8l: accept CALL reg, reg

The new src argument is ignored during linking
(that is, CALL r1, r2 is identical to CALL r2 for linking),
but it serves as a hint to the 5g/6g/8g optimizer
that the src register is live on entry to the called
function and must be preserved.

It is possible to avoid exposing this fact to the rest of
the toolchain, keeping it entirely within 5g/6g/8g,
but I think it will help to be able to look in object files
and assembly listings and linker -a / -W output to
see CALL instructions are "Go func value" calls and
which are "C function pointer" calls.

R=ken2
CC=golang-dev
https://golang.org/cl/7364045
This commit is contained in:
Russ Cox 2013-02-22 14:23:21 -05:00
parent 9c7aa5fea9
commit d57fcbf05c
3 changed files with 5 additions and 2 deletions

View File

@ -63,6 +63,7 @@ Optab optab[] =
{ AB, C_NONE, C_NONE, C_ROREG, 6, 4, 0, LPOOL },
{ ABL, C_NONE, C_NONE, C_ROREG, 7, 8, 0 },
{ ABL, C_REG, C_NONE, C_ROREG, 7, 8, 0 },
{ ABX, C_NONE, C_NONE, C_ROREG, 75, 12, 0 },
{ ABXRET, C_NONE, C_NONE, C_ROREG, 76, 4, 0 },

View File

@ -326,7 +326,8 @@ uchar yloop[] =
};
uchar ycall[] =
{
Ynone, Yml, Zo_m64, 2,
Ynone, Yml, Zo_m64, 0,
Yrx, Yrx, Zo_m64, 2,
Ynone, Ybr, Zcall, 1,
0
};

View File

@ -266,7 +266,8 @@ uchar yloop[] =
};
uchar ycall[] =
{
Ynone, Yml, Zo_m, 2,
Ynone, Yml, Zo_m, 0,
Yrx, Yrx, Zo_m, 2,
Ynone, Ycol, Zcallind, 2,
Ynone, Ybr, Zcall, 0,
Ynone, Yi32, Zcallcon, 1,