[M3commit] CVS Update: cm3

Jay Krell jkrell at elego.de
Sat Sep 22 02:20:38 CEST 2012

CVSROOT:	/usr/cvs
Changes by:	jkrell at birch.	12/09/22 02:20:37

Modified files:
	cm3/m3-sys/m3middle/src/: M3CG_MultiPass.i3 M3CG_MultiPass.m3 

Log message:
	significant work in progress on data structures
	useful to backends -- storing up all the m3cg
	in memory, to be looped over/played back, in order
	to get it into the order needed
	This is a LOT of tedious work.
	It was SO much easier to do in m3cc via the preprocessor.
	A macro processor can be incredibly useful. Really.
	Three or so modes are allowed for (which does increase the tedium).
	One can loop over the array of refs and use ISTYPE/NARROW/LOOPHOLE.
	ISTYPE/NARROW would be unnecessarily slow, LOOPHOLE would be fast
	One can loop pver and switch on a type tag (not all filled in).
	One can pass in a M3CG and the data will all be passed to
	its appropriate functions (work in progress).
	And then pass in a different M3CG, that shares state with the first.
	Like, "mini" M3CGs that do nothing (inherit from M3CG_DoNothing)
	but pay attention to only a few functions, like e.g. to accumulate
	a list of all struct sizes.
	I will probably use that last option.
	This will give us the power to fix several things:
	- support arbitrary struct sizes as parameters
	- pass and esp. return structs by value letting the C compiler do the work,
	as well as being ABI compliant (what we haven't isn't a violation per se,
	for our code, as you can write your C this way; it is a violation for <*extern*> though.)
	- only declare/implement static helper functions that we use
	- support uplevel locals in nested blocks -- to enable building the whole system!
	- forward declare all imports ahead of all functions, and therefore
	- just once
	- honor begin/end_block; stop tacking numbers onto identifiers
	- maybe honor free_temp
	- generate valid C++ for the module globals (w/o an extra indirection)
	- possibly use real structs and infer real field accesses
	- maybe more (there is more to improve, not sure if this stuff
	needed for it; e.g. move globals out of the "segment" would be nice
	remove obviously unused functions; fix shifts by greater than size
	(requires symbolic expressions instead of strings)
	- much better stock debugging! (due to the structs)

More information about the M3commit mailing list