> What I understand is that in gen_icount_start 'icount_arg' keeps a pointer > to gen_opparam_ptr which is used in gen_icount_end to patch up the value . I > however didnt understand what the 'horrid hack' is about. Can any one give > me some idea on this ?
>My guess is that it's a hack because it's a layering violation. Functions >that generate TCG (intermediate representation) should do it by calling >the tcg_ functions, and the data structures and variables like >gen_opparam_ptr should be internal to the TCG layer. However here we >rely on knowing implementation details of how the TCG layer actually writes >out the ops and parameters when you call tcg_gen_subi_i32(). >A clean design would make the TCG layer provide some kind of API for >writing out code and then fixing up the values afterwards, but on the other >hand if we only have one use case... Oh I just found out from the mailing list archives that '0xdeadbeef' is a value that is later patched by the number of instructions 'num_insns' and that is what the hack is about. http://thread.gmane.org/gmane.comp.emulators.qemu/131848/focus=132842 Regards, Biswa On Sun, Dec 30, 2012 at 8:01 PM, Peter Maydell <peter.mayd...@linaro.org>wrote: > On 30 December 2012 23:14, biswaranjan panda > <biswaranjan.nit...@gmail.com> wrote: > > What I understand is that in gen_icount_start 'icount_arg' keeps a > pointer > > to gen_opparam_ptr which is used in gen_icount_end to patch up the value > . I > > however didnt understand what the 'horrid hack' is about. Can any one > give > > me some idea on this ? > > My guess is that it's a hack because it's a layering violation. Functions > that generate TCG (intermediate representation) should do it by calling > the tcg_ functions, and the data structures and variables like > gen_opparam_ptr should be internal to the TCG layer. However here we > rely on knowing implementation details of how the TCG layer actually writes > out the ops and parameters when you call tcg_gen_subi_i32(). > A clean design would make the TCG layer provide some kind of API for > writing out code and then fixing up the values afterwards, but on the other > hand if we only have one use case... > > -- PMM >