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