[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: The progress of hacking guile and prolog
From: |
Stefan Israelsson Tampe |
Subject: |
Re: The progress of hacking guile and prolog |
Date: |
Fri, 5 Nov 2010 22:19:54 +0100 |
User-agent: |
KMail/1.13.5 (Linux/2.6.34.7-0.3-desktop; KDE/4.4.4; x86_64; ; ) |
Ok, for the c generator, here are some code attached. I would
just study this there is bit's still missing and you need to wait for me to
dig up the details. My point is to suggest ideas for what can be done.
I don't assume that this is it. But it's a nice playing ground.
So it is a hack, here is what I do.
(use modules (language glil compile-assembly))
(set! *compile-to-c* #t)
(define (f N)
(set! <c-dummy> '<c-code-tag>) ;; This tagg!! initiate the compiler
;; and c-fkn will use the
;; <c-code-tag> slot :-)
(let loop ((I N) (X 0))
(if (eq? I 0)
X (loop
(- I 1) (+ X 1)))))
(generate-c-fkns "fkn")
Then in a sub-directory called cboost from the starting directory you find
fkn.c and a makefile. e.g.
Makefile:
=========
libguile-fkn.so : fkn.c
gcc -shared -O2 -o libguile-fkn.so -fPIC fkn.c
fkn.c:
======
#include "cfkn.h"
#define LOCAL_REF(i) fp[i]
#define LOCAL_SET(i,v) fp[i] = (v)
void cfkn3676(SCM *fp, SCM **spp)
{
/* setup of environment */
SCM *objects, *free, program, *sp, sss[100];
sp = sss;
program = fp[-1];
objects = SCM_I_VECTOR_WELTS (SCM_PROGRAM_OBJTABLE (program));
free = SCM_PROGRAM_FREE_VARIABLES(program);
/* compiled section */
LCASE3666:
goto L3668;
LCASE3665:
sp++; *sp = LOCAL_REF(1);
sp++; *sp = SCM_I_MAKINUM(0);
sp-=2; if(!scm_is_eq(sp[1],sp[2])) goto L3669;
sp++; *sp = LOCAL_REF(2);
RETURN;
L3669:
sp++; *sp = LOCAL_REF(1);
SUB1;
sp++; *sp = LOCAL_REF(2);
ADD1;
LOCAL_SET(2,*sp) ; sp--;
LOCAL_SET(1,*sp) ; sp--;
goto LCASE3665;
L3668:
sp++; *sp = LOCAL_REF(0);
sp++; *sp = SCM_I_MAKINUM(0);
LOCAL_SET(2,*sp) ; sp--;
LOCAL_SET(1,*sp) ; sp--;
goto LCASE3665;
}
void init_fkn.c()
{
SCM cfkn3676_sym;
cfkn3676_sym = scm_from_locale_symbol("cfkn3676");
printf("loading fkn %s as adres %x.\n","cfkn3676",&cfkn3676);
scm_define(cfkn3676_sym,SCM_PACK(((scm_t_bits) &cfkn3676) | 2));
}
So compileing and loading the shared library into guile you should be able
to issue (f 1000000) and get a correct and fast result.
I'm did not find my cfkn.h file but I'll send you the stuff I have. I modify
glil->assembly and add offload some bit's into an extra file into the same
directory also a vm-instruction is added to be able to start the c-code.
Have fun
Stefan
compile2c.tar.gz
Description: application/compressed-tar
- Re: Guile-SCSH, (continued)
- Re: Guile-SCSH, Stefan Israelsson Tampe, 2010/11/28
- Re: Guile-SCSH, Jose A. Ortega Ruiz, 2010/11/28
- Re: Guile-SCSH, Stefan Israelsson Tampe, 2010/11/29
- http://gitorious.org/guile-scsh/guile-scsh, Stefan Israelsson Tampe, 2010/11/29
- Guile-Facade, Ludovic Courtès, 2010/11/30
- Re: The progress of hacking guile and prolog, Ludovic Courtès, 2010/11/25
- Re: The progress of hacking guile and prolog, Noah Lavine, 2010/11/26
- Re: The progress of hacking guile and prolog, Andy Wingo, 2010/11/26
Re: The progress of hacking guile and prolog, Andy Wingo, 2010/11/20
Re: The progress of hacking guile and prolog, Stefan Israelsson Tampe, 2010/11/04
Re: The progress of hacking guile and prolog,
Stefan Israelsson Tampe <=