~mcf/qbe

74ed7dfd09b30a03e9e0063e6efbe5c8d408b707 — Michael Forney 1 year, 5 months ago a3a4390
amd64: Use member class for aggregate parameter temporary

Otherwise, we may end up using an integer and floating class for the
same register, triggering an assertion failure:

	qbe: rega.c:215: pmrec: Assertion `KBASE(pm[i].cls) == KBASE(*k)' failed.

Test case:

	type :T = { s }
	export
	function $d(:T %.1, s %.2) {
	@start
		call $c(s %.2)
		ret
	}
1 files changed, 2 insertions(+), 2 deletions(-)

M amd64/sysv.c
M amd64/sysv.c => amd64/sysv.c +2 -2
@@ 467,10 467,10 @@ selpar(Fn *fn, Ins *i0, Ins *i1)
		}
		r = rarg(a->cls[0], &ni, &ns);
		if (i->op == Oparc) {
			emit(Ocopy, Kl, a->ref[0], r, R);
			emit(Ocopy, a->cls[0], a->ref[0], r, R);
			if (a->size > 8) {
				r = rarg(a->cls[1], &ni, &ns);
				emit(Ocopy, Kl, a->ref[1], r, R);
				emit(Ocopy, a->cls[1], a->ref[1], r, R);
			}
		} else
			emit(Ocopy, i->cls, i->to, r, R);