public inbox for jit@gcc.gnu.org
 help / color / mirror / Atom feed
From: Petter Tomner <tomner@kth.se>
To: "David Malcolm" <dmalcolm@redhat.com>,
	"Marc Nieper-Wißkirchen" <marc.nieper+gnu@gmail.com>,
	"jit@gcc.gnu.org" <jit@gcc.gnu.org>
Subject: Sv: Global register variables
Date: Thu, 2 Sep 2021 16:05:48 +0000	[thread overview]
Message-ID: <a4f58071ba2a4dfabc8970b0123dd5bc@kth.se> (raw)
In-Reply-To: <3ce0d8336fb7290d7a1dfcade0b2104dd3efcc77.camel@redhat.com>

Hi! Conceptually is seems quite straight forward if you want to try it on some code you have. 
See the attached code that hack any identifier starting with reg_* to  a "global register" named *.

It seems to work with e.g "reg_r14" and "reg_r15" on my machine with some silly getter and 
setter functions for those registers but there is an array "global_regs" in reginfo.c that is not
reset after each run so only run it once. And as EXPORTED global type.

I guess error handling and eg. having not to specify register explicitly for portability
would be the interesting and little bit harder part. 

Regards

From f45d0e328b21b2a4b23021c099f1f3b0ad6e6002 Mon Sep 17 00:00:00 2001
From: Petter Tomner <tomner@kth.se>
Date: Thu, 2 Sep 2021 17:23:24 +0200
Subject: [PATCH] Hack reg_* identifiers to global register

---
 gcc/jit/jit-playback.c | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/gcc/jit/jit-playback.c b/gcc/jit/jit-playback.c
index 79ac525e5df..fa011ed4c0c 100644
--- a/gcc/jit/jit-playback.c
+++ b/gcc/jit/jit-playback.c
@@ -40,7 +40,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "gcc.h"
 #include "diagnostic.h"
 #include "stmt.h"
-
+#include "varasm.h"
 #include <pthread.h>
 
 #include "jit-playback.h"
@@ -567,6 +567,19 @@ global_new_decl (location *loc,
       break;
     }
 
+  { /* Filescope register variables on identifiers reg_REGNUM */
+    const char *key = "reg_";
+
+    for (int i = 0; i < 4; i++)
+      if (name[i] != key[i]) goto bail;
+    if (!name[4]) goto bail;
+
+    DECL_REGISTER (inner) = 1;
+    set_user_assembler_name (inner, name + 4);
+    DECL_HARD_REGISTER (inner) = 1;
+  }
+bail:
+
   if (loc)
     set_tree_location (inner, loc);
 
-- 
2.20.1

-----Ursprungligt meddelande-----
Från: Jit <jit-bounces+tomner=kth.se@gcc.gnu.org> För David Malcolm via Jit
Skickat: den 2 september 2021 16:34
Till: Marc Nieper-Wißkirchen <marc.nieper+gnu@gmail.com>; jit@gcc.gnu.org
Ämne: Re: Global register variables

On Tue, 2021-08-31 at 08:39 +0200, Marc Nieper-Wißkirchen via Jit
wrote:
> Does libgccjit support GCC's global register variables ([1])?

Not currently.

> 
> If not, could we expect them to be included?

> One major use case of
> libgccjit seems to be JIT compilation of some virtual machine bytecode 
> and virtual machines usually need a number of global variables (like 
> some virtual stack pointer or heap pointer, etc.).  It makes a lot of 
> sense to hold them in global (callee-saved) registers.

Sounds like a useful feature; if someone wants to cook up a patch I can review it.

Dave


  reply	other threads:[~2021-09-02 16:05 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-08-31  6:39 Marc Nieper-Wißkirchen
2021-09-02 14:33 ` David Malcolm
2021-09-02 16:05   ` Petter Tomner [this message]
2021-09-02 16:33     ` Marc Nieper-Wißkirchen
2021-09-02 16:44     ` Sv: " David Malcolm
2021-09-02 17:06       ` Sv: " Petter Tomner
2021-09-02 17:09         ` Marc Nieper-Wißkirchen
2021-12-07  9:07           ` Marc Nieper-Wißkirchen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=a4f58071ba2a4dfabc8970b0123dd5bc@kth.se \
    --to=tomner@kth.se \
    --cc=dmalcolm@redhat.com \
    --cc=jit@gcc.gnu.org \
    --cc=marc.nieper+gnu@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).