util/ncidev2pasm.pl

2004-02-19 Thread chromatic
On Thu, 2004-02-19 at 17:54, Jens Rieks wrote:

> > > One downside of making sdl.imc smarter (changing it from sdl.pasm) is
> > > that we can no longer use build_tools/build_nativecall.pl as is.  That
> > > may be an argument for making the tool smarter.
> >
> > Why?

> Sorry if its a stupid question, but what has build_tools/build_nativecall.pl 
> todo with sdl.pasm? I have to admin that I only have touched the NCI stuff 
> cursorily.

Oops, I meant util/ncidef2pasm.pl.

The easiest way to build up a set of NCI calls is to write a
declarations file and process it with util/ncidef2pasm.pl.  The original
SDL declarations file was:

[package]
SDL

[lib]
libSDL.so

[defs]
# from SDL.h
i SDL_Init i
p SDL_SetVideoMode iiil
v SDL_Quit
i SDL_FillRect ppl
v SDL_UpdateRect p

Run that through the tool and it spits out several lines of pasm.  It's
not hard to write that code by hand, but it's a little tedious.  Of
course, with various patches and plans, I've been updating it by hand.

Maybe it's worth updating to spit out PIR.  Maybe not.  I've attached a
patch that makes it a little bit smarter about register saving though.

-- c


Index: util/ncidef2pasm.pl
===
RCS file: /cvs/public/parrot/util/ncidef2pasm.pl,v
retrieving revision 1.1
diff -u -u -r1.1 ncidef2pasm.pl
--- util/ncidef2pasm.pl	23 Sep 2003 14:42:18 -	1.1
+++ util/ncidef2pasm.pl	20 Feb 2004 03:44:31 -
@@ -152,8 +152,8 @@
 open INPUT, "<$from_file" or die "Can't open up $from_file, error $!";
 open OUTPUT, ">$to_file" or die "Can't open up $to_file, error $!";
 
-# To start, save all the registers, just in case
-print OUTPUT "saveall\n";
+# To start, save the two registers we use, just in case
+print OUTPUT "save P1\nsave P2\n";
 
 
 my @libs;
@@ -187,7 +187,7 @@
 }
 
 # Put the registers back and end
-print OUTPUT "restoreall\n";
+print OUTPUT "restore P1\nrestore P2\n";
 print OUTPUT "end\n";
 close OUTPUT;
 


Re: util/ncidev2pasm.pl

2004-02-20 Thread Leopold Toetsch
Chromatic <[EMAIL PROTECTED]> wrote:

> Oops, I meant util/ncidef2pasm.pl.

This util just spits out PASM that generate NCI stubs and stores them as
globals. Not much change necessary: just put 2 statements around

  .pcc_sub _sdl_init_nci_globals LOAD
  [ code ]
  invoke P1

This makes a subroutine out of the code (PASM is fine). Then instead of
C<.include> that file you do C it in e.g. C<_init>.

I'll try to get the LOAD pragma running RSN.

leo