On 09/27/2012 10:15 AM, Aurelien Jarno wrote: > - TCG_OPF_CALL_CLOBBER: The op clobber the call registers. They are > freed before emitting the op. > - TCG_OPF_SIDE_EFFECTS: The op is not removed if the returned value > if not used. It can trigger exception and thus globals are > synchronized before emitting the op. > - TCG_OPF_READ_GLOBALS: The op can read globals but not write them, > and thus globals are synchronized before emitting the op. > - TCG_OPF_WRITE_GLOBALS: The op can read and write globals, and thus > globals are saved back to their canonical location before emitting > the op.
This is more or less exactly the flag breakup I was talking about for calls. I don't agree with SIDE_EFFECTS implying exceptions. How can "br" cause an exception? Or for that matter "st_i32", recalling that we're not storing to guest memory. > Note: While this is restoring the possibility to map a memory address > using both a global and accessing it through ld/st, this reduces the > performances of targets generating a lot of ld/st op. Given it is > currently technically not allowed, we might instead change the TCG > documentation to make that clear. Yes, I think we should. I can't see that this is something that we should *ever* do. r~