On Thu, Sep 27, 2012 at 12:56:11PM -0700, Richard Henderson wrote: > 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.
That's exactly why SIDE_EFFECTS has been removed from this op in the previous patch. I think it implies exception, because I don't see why an op shouldn't be removed otherwise (remember ops without outputs are never removed). > > 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. > Ok, then the documentation should be fixed. -- Aurelien Jarno GPG: 1024D/F1BCDB73 aurel...@aurel32.net http://www.aurel32.net