Commit d57fcbf0 authored by Russ Cox's avatar Russ Cox

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
parent 9c7aa5fe
......@@ -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 },
......
......@@ -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
};
......
......@@ -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,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment