[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Tinycc-devel] make tcc reentrant
From: |
Christian Jullien |
Subject: |
Re: [Tinycc-devel] make tcc reentrant |
Date: |
Sat, 7 Dec 2019 08:57:25 +0100 |
> 2) slower code: most of the time the indirection through a pointer
variable (the state) in comparison to a direct access to a static
variable doesn't matter.
In fact, I experimented the opposite. When moving all global variables to a
struct, my Lisp was around 1% faster because globals are now close together and
more often accessible from L1 cache.
It has of course no effect when global is a pointer which introduces the same
indirection.
It is true for aggressive optimizers which are likely to put struct pointer to
a register.
So it may be faster for tcc compiled by gcc, clang or vc++ but slower when tcc
is compiled by tcc.
C.
-----Original Message-----
From: Tinycc-devel [mailto:tinycc-devel-bounces+eligis=address@hidden] On
Behalf Of Michael Matz
Sent: Friday, December 06, 2019 16:42
To: TCC mailing list
Subject: Re: [Tinycc-devel] make tcc reentrant
Hello,
On Tue, 3 Dec 2019, Ulrich Schmidt wrote:
> i try to write a lua binding for tcc. To work out propperly, the tcc lib
> needs to be reentrant.
As demonstrated down-thread, that isn't correct. It doesn't _need_ to be,
it would be an feature. As usual with features it needs to be measured
against the downsides. The downsides for your proposed changes are the
following at least:
1) more complicated/boiler-platy source code of TCC (a TCCState
argument almost everywhere)
2) slower code: most of the time the indirection through a pointer
variable (the state) in comparison to a direct access to a static
variable doesn't matter. But it does matter for the symbol/token
table (and potentially for the register/evaluation stack). I have
measured this years ago for the token table, so this might or might not
still be the case.
So, while I can see the wish for this feature, I don't necessarily see
that tcc should be changed to accomodate.
If anything I would expect a _complete_ transition to exist, in order to
measure the impact. The worst thing that could happen is if someone added
TCCState arguments everywhere, moved some static variables to that state,
and then leaves: none of the features of this whole excercise would be
had, but all the downsides would be there.
And yes, this is a big project. I really think it would be better
if you simply write a wrapper for libtcc that ensures single-threadedness
and that regards TCCState as a singleton. I think such thing would be
well-suited in the TCC sources itself.
(In a way it seems prudent for a tiny C compiler to only be usable as a
singleton)
Ciao,
Michael.
>
> I took a look into the sources and found some comments (XXX:...) and
> started with removing
>
> the static var tcc_state. As a result allmost all lib functions needs a
> 1st parameter of
>
> type TCCState*. I did this in my own local branch and tcc is still
> running :).
>
> But this is a really HUGE change. in addition most of the local vars in
> tccpp, tccgen, ... needs
>
> to be moved to TCCState. I can do that but at some points i will have
> some questions and i
>
> can only test on windows and probably on linux.
>
> My 1st question is: Are you interested in these changes or should i do
> this locally?
>
> I would like to this together with you.
>
>
> Greetings.
>
> Ulrich.
>
>
> _______________________________________________
> Tinycc-devel mailing list
> address@hidden
> https://lists.nongnu.org/mailman/listinfo/tinycc-devel
>
_______________________________________________
Tinycc-devel mailing list
address@hidden
https://lists.nongnu.org/mailman/listinfo/tinycc-devel
- Re: [Tinycc-devel] make tcc reentrant, (continued)
- Re: [Tinycc-devel] make tcc reentrant, Ulrich Schmidt, 2019/12/07
- Re: [Tinycc-devel] make tcc reentrant, Daniel Glöckner, 2019/12/07
- Re: [Tinycc-devel] make tcc reentrant, uso ewin, 2019/12/08
- Re: [Tinycc-devel] make tcc reentrant, Ulrich Schmidt, 2019/12/08
- Re: [Tinycc-devel] make tcc reentrant, Michael Matz, 2019/12/09
- Re: [Tinycc-devel] make tcc reentrant, Michael Matz, 2019/12/09
- Re: [Tinycc-devel] make tcc reentrant, Michael Matz, 2019/12/09
- Re: [Tinycc-devel] make tcc reentrant, Ulrich Schmidt, 2019/12/09
- Re: [Tinycc-devel] make tcc reentrant, Michael Matz, 2019/12/09
Re: [Tinycc-devel] make tcc reentrant, grischka, 2019/12/06
Re: [Tinycc-devel] make tcc reentrant,
Christian Jullien <=
- Re: [Tinycc-devel] make tcc reentrant, Michael Matz, 2019/12/09
- Re: [Tinycc-devel] make tcc reentrant, Domingo Alvarez Duarte, 2019/12/09
- Re: [Tinycc-devel] make tcc reentrant, ag, 2019/12/10
- Re: [Tinycc-devel] make tcc reentrant, Forrest Curo, 2019/12/10
- Re: [Tinycc-devel] make tcc reentrant, grischka, 2019/12/10
- Re: [Tinycc-devel] make libtcc reentrant, Ulrich Schmidt, 2019/12/11
- Re: [Tinycc-devel] make libtcc reentrant, grischka, 2019/12/11
- Re: [Tinycc-devel] make libtcc reentrant, Karl Yerkes, 2019/12/11
Re: [Tinycc-devel] make libtcc reentrant, uso ewin, 2019/12/12
Re: [Tinycc-devel] make tcc reentrant, Michael Matz, 2019/12/11