summary |
shortlog | log |
commit |
commitdiff |
tree
first ⋅ prev ⋅ next
Bernhard Urban [Tue, 24 Apr 2012 15:55:55 +0000 (17:55 +0200)]
static initializer: execute it when loading the class file
unfortunately, we have a circle dependency now, hence the file
`Mate/MethodPool.hs-boot'.
Bernhard Urban [Tue, 24 Apr 2012 15:49:22 +0000 (17:49 +0200)]
java.lang: use Object.class from GNU Classpath
it doesn't have a static initializer.
java/lang/Object from OpenJDK does something weird
in the static initializer:
invokestatic #17; //Method registerNatives:()V
we don't want that.
Bernhard Urban [Tue, 24 Apr 2012 09:10:42 +0000 (11:10 +0200)]
static methods: add inheritance capability
if the method isn't found when compiling, check the superclasses for
this certain method. if one is found eventually, add an map entry
for each class to the same method entry.
see tests/Static5.java
Bernhard Urban [Mon, 23 Apr 2012 23:22:24 +0000 (01:22 +0200)]
static fields: testcase: overwriting of fields
Bernhard Urban [Mon, 23 Apr 2012 23:17:12 +0000 (01:17 +0200)]
codegen: fix bug in calling conv
the callee used elements of the callers stack as storage for local vars.
don't do that.
Bernhard Urban [Mon, 23 Apr 2012 20:44:28 +0000 (22:44 +0200)]
java.lang: add Object.class from rt.jar (OpenJDK)
building java/lang/Object.class with javac isn't that easy, so... let's steal it :-/
TODO:
- replace binary blob with some actual code. actually, we can
use hs-java for that ;-)
Bernhard Urban [Mon, 23 Apr 2012 20:38:00 +0000 (22:38 +0200)]
make test: less verbose plzkkthx
... and, there is something broken @ Fac.java :-(
stay tuned... *sigh*
Bernhard Urban [Mon, 23 Apr 2012 20:38:00 +0000 (22:38 +0200)]
classpool: copy field members refs from superclass
Bernhard Urban [Mon, 23 Apr 2012 14:10:21 +0000 (16:10 +0200)]
codegen: factor offset calculation
Bernhard Urban [Mon, 23 Apr 2012 14:10:21 +0000 (16:10 +0200)]
codegen: {put,get}static for static field access
TODO:
- execute static initializer upon first loading
- inheritance
Bernhard Urban [Mon, 23 Apr 2012 14:10:21 +0000 (16:10 +0200)]
refactor: s/C(aller)Map/T(rap)Map/g
we want to store more information for traps, hence an more appropriate name
Bernhard Urban [Mon, 23 Apr 2012 14:10:21 +0000 (16:10 +0200)]
global map hack: refactor
TODO: do some haskell magic for conversion functions.
type class? template haskell?
Bernhard Urban [Mon, 23 Apr 2012 14:10:21 +0000 (16:10 +0200)]
classpool: do classloading at central point. omit '.class' when calling `mate'
Bernhard Urban [Sun, 22 Apr 2012 23:14:45 +0000 (01:14 +0200)]
methodpool: also call native methods
some comments:
(1) we need shared libs now, otherwise the binary too big (~24MB).
please recompile from cabal (see README)
(2) as C doesn't allow '/', '(' and ')' as identifier names (unlike
forth <3), we replace them with '_', in order to identify a
(unique) native function. the pattern is as follows:
class__methodname__methodsignature
(3) `loadNativeFunction' is quite hackisch now. I don't know if we
get troubles with it at some point. we should consider:
(3a) ask on stackoverflow
(3b) patch this wtf stuff in ghc
(3c) just determine addresses at compile-time.
(3c) sucks, because you have to write much glue-code for every
native method. but maybe we could solve it with some magic TH
stuff (as suggested by hs_)
Bernhard Urban [Sun, 22 Apr 2012 23:14:45 +0000 (01:14 +0200)]
types: oops, we don't want the index at this point (MethodInfo)
it would be valid just for one certain class anyway... and we don't need it really
Bernhard Urban [Sun, 22 Apr 2012 18:42:50 +0000 (20:42 +0200)]
modules: move (public) datatypes into a new module
Bernhard Urban [Sun, 22 Apr 2012 18:42:50 +0000 (20:42 +0200)]
classloading: load classfile on demand
first step, not really done cleanly at the moment.
TODO: introduce a classpool, where the
(1) static initializer is executed upon first loading
(2) reference to `Class Resolved' is saved somewhere
Bernhard Urban [Sun, 22 Apr 2012 18:42:50 +0000 (20:42 +0200)]
trap: give disasm some nop's, so it shows the label
the disasm doesn't show labels on invalid opcode, but
that's convenient when debugging.
one can argue it's not really efficient here, because two cycles are wastet.
imho that's not true, since modern x86 cpu's eliminate such instructions
sequences.
we could benchmark/test that, but well, it's just on the first hit, so suck it.
Bernhard Urban [Sun, 22 Apr 2012 18:42:50 +0000 (20:42 +0200)]
codegen: correct argument handling
after a call, we have to decrement the stack pointer again, according how many
arguments that method has. also, we have to push the result in %eax only when
there's a result (i.e. /= void)
Bernhard Urban [Sun, 22 Apr 2012 18:33:03 +0000 (20:33 +0200)]
README: some notes about a ghc 7.4.1 install (shipped with Ubuntu LTS 12.04)
Harald Steinlechner [Sat, 21 Apr 2012 10:31:05 +0000 (12:31 +0200)]
Mate: exposed internal functions of BasicBlocks for external benchmarks
scratch: implemented kind of benchmark (non trustworthy currently)
Harald Steinlechner [Fri, 20 Apr 2012 16:20:05 +0000 (18:20 +0200)]
scratch: refactored ScratchHS into separate files.
scratch: more refactoring. cyclic cfg finally works
Harald Steinlechner [Fri, 20 Apr 2012 14:52:59 +0000 (16:52 +0200)]
scratch: implemented [node][edge] -> circular structure.
Harald Steinlechner [Wed, 18 Apr 2012 19:06:56 +0000 (21:06 +0200)]
scratch: checked out some abstractions, sandboxing, mostly broken ;-)
tests: added for version of fac to Fac
Bernhard Urban [Wed, 18 Apr 2012 10:51:56 +0000 (12:51 +0200)]
scratch: Makefile dependencies, LaTeX fun, .gitignore
pdflatex ftw!
Bernhard Urban [Wed, 18 Apr 2012 10:40:14 +0000 (12:40 +0200)]
trap: use SIGILL instead of SIGSEGV
therefore we can use SIGSEGV for other things (e.g. exception handling)
Bernhard Urban [Wed, 18 Apr 2012 10:21:37 +0000 (12:21 +0200)]
doc: more related stuff
thx @ hs_
Harald Steinlechner [Wed, 18 Apr 2012 01:04:10 +0000 (03:04 +0200)]
scratch: sketched monadic foldTree stuff. Maybe quite senseless but given this a CFG could be formulated in a functional way.
Bernhard Urban [Tue, 17 Apr 2012 21:57:31 +0000 (23:57 +0200)]
basicblocks: also consider back references
as we just iterate the instruction stream when generating basicblocks, we need
extra handling for back references.
the solution adds a further pass, which marks targets of jumps (actually it
marks the instruction right *before* the target)
kudos @ tests/Fac.java for being a useful testcase :-)
Bernhard Urban [Tue, 17 Apr 2012 21:57:31 +0000 (23:57 +0200)]
tests: calculate factorial (non-recursive)
Harald Steinlechner [Tue, 17 Apr 2012 11:58:57 +0000 (13:58 +0200)]
Merge branch 'master' of wien.tomnetworks.com:mate
Harald Steinlechner [Tue, 17 Apr 2012 11:58:28 +0000 (13:58 +0200)]
scratch: Translation scheme latex/literal haskell setup. Translation.lhs should contain documentation for intermediate representation and its compilation schemes
Bernhard Urban [Tue, 17 Apr 2012 11:22:00 +0000 (13:22 +0200)]
.gitignore: *.swp and object files
Harald Steinlechner [Tue, 17 Apr 2012 10:30:10 +0000 (12:30 +0200)]
ffi: added strange hack in order to build master on my machine:
Linux version 3.0.0-12-generic (buildd@aro 4.6.1-9ubuntu3)
#20-Ubuntu SMP Fri Oct 7 14:50:42 UTC 2011,
gcc (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1;
Harald Steinlechner [Tue, 17 Apr 2012 10:11:10 +0000 (12:11 +0200)]
added scratch - for design experimentation and sandboxing
Bernhard Urban [Mon, 16 Apr 2012 20:01:41 +0000 (22:01 +0200)]
gdb: small howto debug generated code
not very convenient yet, but hey, better than nothing!
Bernhard Urban [Mon, 16 Apr 2012 20:01:41 +0000 (22:01 +0200)]
methodpool: save information in codegen context
use that for on-demand compiling
Bernhard Urban [Mon, 16 Apr 2012 20:01:41 +0000 (22:01 +0200)]
tests: add package definition
Bernhard Urban [Mon, 16 Apr 2012 20:01:40 +0000 (22:01 +0200)]
Makefile: forgot slash at clean target
Bernhard Urban [Mon, 16 Apr 2012 11:14:20 +0000 (13:14 +0200)]
README: more notes on dependencies
Bernhard Urban [Sat, 14 Apr 2012 17:54:20 +0000 (19:54 +0200)]
methodPool: compile methods on-demand
just works with `fib' atm. we need a second "tracker-map" when emitting an
`invoke*' instruction. there we have to lookup and save related method
information.
Bernhard Urban [Sat, 14 Apr 2012 12:51:41 +0000 (14:51 +0200)]
Makefile: GHCi still broken
although
http://stackoverflow.com/questions/
10123040/ghci-doesnt-work-with-ffi-export-declarations-shared-libaries
fixed an issue, there is now a different one:
> $ make ghci
> [...]
> Ok, modules loaded: Main, Mate.X86CodeGen, Mate.MethodPool, Mate.BasicBlocks, Mate.Utilities.
> Prelude Main> main
>
>
> GHCi runtime linker: fatal error: I found a duplicate definition for symbol
> MateziUtilities_lookupMethod_srt
> whilst processing object file
> ./Mate/Utilities.o
> This could be caused by:
> * Loading two different object files which export the same symbol
> * Specifying the same object file twice on the GHCi command line
> * An incorrect `package.conf' entry, causing some object to be
> loaded twice.
> GHCi cannot safely continue in this situation. Exiting now. Sorry.
>
> make: *** [ghci] Error 1
so, `make ghci' and `make tags' still doesn't work due to FFI stuff.
we have to use `make test' until we fix it :-(
Bernhard Urban [Sun, 8 Apr 2012 22:35:44 +0000 (00:35 +0200)]
Makefile: update rules
Bernhard Urban [Sun, 8 Apr 2012 22:35:44 +0000 (00:35 +0200)]
build: fix -Wall warnings
Bernhard Urban [Sun, 8 Apr 2012 22:35:44 +0000 (00:35 +0200)]
methodpool: small demo how to access a Data.Map instance from C
yes. it's ugly, unsafe, etc.
but it works :-)
Bernhard Urban [Sun, 8 Apr 2012 18:22:15 +0000 (20:22 +0200)]
main: remove PoC code
Bernhard Urban [Sun, 8 Apr 2012 18:21:56 +0000 (20:21 +0200)]
codegen: patch method calls on-demand via traps
we can determine the source of an invalid memory access via unix signal
handling. to do so, we write
> mov (Addr 0) eax ; 0x8905 0000 0000
which tries to access memory at address 0. upon first execution of this
instruction the signalhandler is called. there, we replace it with
> nop ; 0x90
> call <target> ; 0xe8 YYYY YYYY ; Y = target
at the moment, this just works with Fib.fib() (or other recursive methods)
as the <target> address is more or less hardcoded.
several TODOs:
- determine address of target method in a different way
- after a call, we have to throw away arguments of the call.
this is hardcoded now.
Bernhard Urban [Sat, 7 Apr 2012 01:44:22 +0000 (03:44 +0200)]
codegen: execute generated code
woot! :-) looks good
Bernhard Urban [Sat, 7 Apr 2012 01:44:21 +0000 (03:44 +0200)]
codegen: use label mechanism of harpy
more convenient than manual patching
Bernhard Urban [Sat, 7 Apr 2012 01:44:21 +0000 (03:44 +0200)]
basicblock: change order of `TwoTarget'
Bernhard Urban [Sat, 7 Apr 2012 01:44:21 +0000 (03:44 +0200)]
basicblock: also generate BB #0 when it's labeld with `Nothing' (BBEnd)
Bernhard Urban [Tue, 3 Apr 2012 22:49:00 +0000 (00:49 +0200)]
codegen: simple code generation stuff
generated code isn't tested yet
Bernhard Urban [Tue, 3 Apr 2012 22:49:00 +0000 (00:49 +0200)]
basicblock: remove warning
it can happen now ;-)
Bernhard Urban [Tue, 3 Apr 2012 22:49:00 +0000 (00:49 +0200)]
basicblock: refactor function interface
Bernhard Urban [Mon, 2 Apr 2012 23:32:26 +0000 (01:32 +0200)]
basicblock: build BBs from instructionstream
Bernhard Urban [Mon, 2 Apr 2012 19:40:00 +0000 (21:40 +0200)]
basicblock: get jump offsets from instructions
Bernhard Urban [Mon, 2 Apr 2012 19:40:00 +0000 (21:40 +0200)]
basicblock: calculate offset in instructionstream
Bernhard Urban [Mon, 2 Apr 2012 19:40:00 +0000 (21:40 +0200)]
src: move files into a Mate package
hence, ghc(i) is able to figuring out the correct path
Bernhard Urban [Mon, 2 Apr 2012 19:40:00 +0000 (21:40 +0200)]
Makefile: generate tags (for vim)
Bernhard Urban [Mon, 2 Apr 2012 00:15:28 +0000 (02:15 +0200)]
README: more install instructions
Bernhard Urban [Mon, 2 Apr 2012 00:00:49 +0000 (02:00 +0200)]
tests: add class with {do-,}while keyword
... which unfortunately fails to parse due to a bug in hs-java.
the bogus instructions are goto and if<cond>, which hs-java
misses to parse their immediate values from the instructionstream.
fix:
$ git clone git@wien.tomnetworks.com:hs-java.git || git clone git://wien.tomnetworks.com/hs-java.git
$ cd hs-java; cabal configure; cabal build; cabal install
Bernhard Urban [Mon, 2 Apr 2012 00:00:49 +0000 (02:00 +0200)]
basicblock: put \n between instructions
Bernhard Urban [Mon, 2 Apr 2012 00:00:48 +0000 (02:00 +0200)]
Makefile: build all class files in tests/
Bernhard Urban [Mon, 2 Apr 2012 00:00:48 +0000 (02:00 +0200)]
compile: use relative call
we have to calculate the offset, but it's cheaper than a register call
Bernhard Urban [Mon, 2 Apr 2012 00:00:48 +0000 (02:00 +0200)]
doc: some related papers
Harald Steinlechner [Tue, 27 Mar 2012 20:22:51 +0000 (22:22 +0200)]
fixed broken Makefile (sry - forgot to check Makefile), added RegisterAllocation playground
Harald Steinlechner [Tue, 27 Mar 2012 20:13:42 +0000 (22:13 +0200)]
Utilities, BasicBlock into src folder, BasicBlock sketching
Harald Steinlechner [Tue, 27 Mar 2012 19:07:59 +0000 (21:07 +0200)]
Mate.hs now uses lately introduced Utilities lookupMethod
Harald Steinlechner [Tue, 27 Mar 2012 19:06:56 +0000 (21:06 +0200)]
moved lookupMethod into separate Utilities file. added BasicBlocks playground
Harald Steinlechner [Thu, 22 Mar 2012 15:44:25 +0000 (16:44 +0100)]
Merge branch 'master' of wien.tomnetworks.com:mate
Harald Steinlechner [Thu, 22 Mar 2012 15:41:55 +0000 (16:41 +0100)]
doc: fixed english grammar mistakes (an on demand manner, analyses is plural of analysis)
Harald Steinlechner [Thu, 22 Mar 2012 15:41:55 +0000 (16:41 +0100)]
doc: fixed englisch grammar mistakes (an on demand manner, analyses is plural of analysis)
Bernhard Urban [Wed, 21 Mar 2012 14:40:39 +0000 (15:40 +0100)]
doc: README
Harald Steinlechner [Wed, 21 Mar 2012 14:09:50 +0000 (15:09 +0100)]
doc: added TODO
Bernhard Urban [Sun, 18 Mar 2012 04:19:43 +0000 (05:19 +0100)]
trapping code: transition from native to haskell rts
Bernhard Urban [Sat, 17 Mar 2012 22:10:52 +0000 (23:10 +0100)]
patching existing code
Bernhard Urban [Sat, 17 Mar 2012 20:20:39 +0000 (21:20 +0100)]
playing around with generated codebuffers
be aware, generated code doesn't make sense yet ;-)
Bernhard Urban [Thu, 15 Mar 2012 21:27:16 +0000 (22:27 +0100)]
mate: Initial commit