我正在尝试为自定义 VM 重新定位 lcc。将结构作为参数(按值)传递时遇到问题。VM 的堆栈从低地址到高地址增长。为参数错误地生成了结构字段的偏移量。
例如,对于下面的代码:
foo(sample p, sample q);
struct sample
{
int a;
int b;
};
main()
{
sample x, y;
foo(x, y);
}
如上所示,结构字段 a 和 bfoo()
位于地址 ( &p
and &p-4
) 和 ( &q
and &q-4
)。这些应该是 ( &p
and &p+4
) 和 ( &q
and &q+4
)。structx
和y
in的地址main()
正确地引用了它们的字段(即生成的地址是&x
,&x+4
和&y
, &y+4
)。我已经验证为 ARG+B 节点生成的代码正确地复制了堆栈上传递的结构参数(复制的结构的基址从低地址开始)。
任何帮助,将不胜感激。