[Yhc] FInfo->codesize woes.
Tom Shackell
shackell at cs.york.ac.uk
Mon Feb 4 04:43:51 EST 2008
Hi Stew,
> Hi YHC!
> Greetings, and for those I haven't already pestered, my interest in
> YHC pertains to my third year project, creating a JIT compiler for YHC's
> bytecode.
Ah excellent :-)
> Does anyone know if the FInfo->codesize value is reliable? I am
> presently compiling the _driver function which states a codesize of
> 0x24, yet my JIT compiler shows the IP (when I reach an END_CODE op)
> falls about 6 bytes short of this.
The codesize is indeed reliable, though interestingly enough I get the
codesize for _driver being 25 bytes rather than (0x24 = 36 bytes). I've
just checked and 25 bytes is indeed correct (including 1 byte for the
END_CODE itself). Here is a printout of the function, as loaded by the
interpreter.
FInfo _driver [ arity: 2, consts: 7 ]{
0. [0x1b] ZAP_ARG 0
2. [0x01] NEED_HEAP_32
3. [0x25] PUSH_CONST_0
4. [0x30] MK_AP_1
5. [0x27] PUSH_CONST_2
6. [0x18] PUSH_ZAP_ARG_1
7. [0x28] PUSH_CONST_3
8. [0x41] APPLY 2
10. [0x01] NEED_HEAP_32
11. [0x33] MK_AP_4
12. [0x34] MK_AP_5
13. [0x0b] PUSH_ZAP_0
14. [0x5a] EVAL
15. [0x5c] TABLE_SWITCH [1] {0 -> 20}
20. [0x01] NEED_HEAP_32
21. [0x4a] UNPACK
22. [0x2b] PUSH_CONST_6
23. [0x5b] RETURN_EVAL
24. [0x00] END_CODE
consts {
0. NODE 0xb6ca222c [(CExitSuccess)]
1. INFO FInfo 'reallyExit'[1]
2. NODE 0xb6ca223c [(FLAMBDA294/1)]
3. NODE 0xb6ca2748 [(Fcatch/0)]
4. INFO FInfo 'YHC.Internal.IO;Prelude.Monad;>>'[2]
5. INFO FInfo 'unsafePerformIO'[1]
6. NODE 0xb6ca2754 [(Fundefined/0)]
}
}
> Also is every function guaranteed to
> have an END_CODE op at the end? My current code works for a selection of
> functions I have played with but I haven't had time to examine any more
> than a modest selection.
Yes the compiler always places END_CODE at the end of every function.
END_CODE crashes the interpreter if it's ever executed, it's designed to
catch any problems with miscalculated jumps.
Hope that helps :-)
Tom
More information about the Yhc
mailing list