Self-Modifying code for user settings optimization

Jason Jeffory via Digitalmars-d digitalmars-d at puremagic.com
Sat Jan 9 03:32:57 PST 2016


On Saturday, 9 January 2016 at 10:41:23 UTC, Rikki Cattermole 
wrote:
> I've been looking into this issue for web routing.
> Over all its definitely more performant.
>
> But:
> - You need some way to generate code
> - ABI compatibility
> - Host binary compatibility (not the same as ABI)
> - Front end for the "language" to specify what to generate
>
> I'm either going sljit way or my own.
> ATM I'm looking at building a c frontend to help with porting 
> of sljit and for the future AOT generation of binaries.
>
> Most of the work to get x86 done for sljit has been done, about 
> 2-3k left.
> https://github.com/rikkimax/sljitd
>
> Regarding if CPU's allow for JIT'ing code, yup they do allow it 
> still.
> If they didn't, that CPU would be next to useless.
>
> However, an OS is not required to expose this. But if you're 
> dealing with Windows and *nix. Don't worry about it.
>
> If you're interested in working on helping to port sljit please 
> do.
> Just note that it isn't a very optimized JIT but it is fairly 
> small and easy to use. Important to me is that it can be fully 
> ported to D without much worries unlike LLVM, which is a pain 
> to compile anyway.

Well, I wasn't thinking of interpreted/JIT code but native.

I suppose D could possibly do it with CTFE? (Create the CTFE to 
keep track of the the addresses, if possible, of where the 
variables are at in memory, so they can be updated).

e.g.,

DoSomething(Settings!"Width"); // Somehow puts in a dummy 
variable and keeps track of it's address

x = Settings!Width; // similar but different behavior. Basically 
turn an complex call(dictionary look up or something similar) to 
a mov x, const instruction, etc..

Mainly I'm thinking about switches like

If (Settings["FastCode"])
{

}

but want to remove the lookup.

Hence maybe something like

if (volatile bool x = TRUE) { }

But then somehow capture x's address(not sure if we could 
accomplish that in D?) which we easily change it's value outside 
the time critical code when needed.


Sorry, I can't help with sljit... have way to many things on my 
plate, at some point I might if stuff changes. I'll look into it 
a little though.

Thanks




More information about the Digitalmars-d mailing list