diff options
Diffstat (limited to 'pkg/qbe/patch/0002-arm64-Handle-slots-in-Ocopy-operands.patch')
| -rw-r--r-- | pkg/qbe/patch/0002-arm64-Handle-slots-in-Ocopy-operands.patch | 56 |
1 files changed, 0 insertions, 56 deletions
diff --git a/pkg/qbe/patch/0002-arm64-Handle-slots-in-Ocopy-operands.patch b/pkg/qbe/patch/0002-arm64-Handle-slots-in-Ocopy-operands.patch deleted file mode 100644 index 5dbd4e6e..00000000 --- a/pkg/qbe/patch/0002-arm64-Handle-slots-in-Ocopy-operands.patch +++ /dev/null @@ -1,56 +0,0 @@ -From d9d890583d93f1bfdc38e4aa890350d4111b848a Mon Sep 17 00:00:00 2001 -From: Michael Forney <mforney@mforney.org> -Date: Thu, 9 May 2019 23:32:15 -0700 -Subject: [PATCH] arm64: Handle slots in Ocopy operands - ---- - arm64/emit.c | 25 +++++++++++++++++++++---- - 1 file changed, 21 insertions(+), 4 deletions(-) - -diff --git a/arm64/emit.c b/arm64/emit.c -index 9ebcfcd..5a3fe55 100644 ---- a/arm64/emit.c -+++ b/arm64/emit.c -@@ -218,8 +218,8 @@ emitf(char *s, Ins *i, E *e) - break; - case 'M': - c = *s++; -- assert(c == '0' || c == '1'); -- r = i->arg[c - '0']; -+ assert(c == '0' || c == '1' || c == '='); -+ r = c == '=' ? i->to : i->arg[c - '0']; - switch (rtype(r)) { - default: - die("TODO emit non reg addresses"); -@@ -307,9 +307,26 @@ emitins(Ins *i, E *e) - case Ocopy: - if (req(i->to, i->arg[0])) - break; -- if (rtype(i->arg[0]) != RCon) -+ if (rtype(i->to) == RSlot) { -+ if (rtype(i->arg[0]) == RSlot) { -+ emitf("ldr %?, %M0\n\tstr %?, %M=", i, e); -+ } else { -+ assert(isreg(i->arg[0])); -+ emitf("str %0, %M=", i, e); -+ } -+ break; -+ } -+ assert(isreg(i->to)); -+ switch (rtype(i->arg[0])) { -+ case RCon: -+ loadcon(&e->fn->con[i->arg[0].val], i->to.val, i->cls, e->f); -+ break; -+ case RSlot: -+ emitf("ldr %=, %M0", i, e); -+ break; -+ default: - goto Table; -- loadcon(&e->fn->con[i->arg[0].val], i->to.val, i->cls, e->f); -+ } - break; - case Oaddr: - assert(rtype(i->arg[0]) == RSlot); --- -2.32.0 - |
