avm2: Some more performance improvements
This finally implements optimizing findpropstrict and findproperty into getscopeobject, getouterscope, and a new custom op getscriptglobals. This also includes splitting getlex into findpropstrict and getproperty, which results in the percentage of optimized getpropertys decreasing (though a microbenchmark shows that it's faster).
We now mix pushbyte, pushshort, pushint, and pushuint into pushintguaranteed, pushintnumber, and pushuintnumber (the last two are the same as pushnumber in runtime, but it just made more sense to have them in the optimizer). This allows for running those ops faster, since we can now guarantee at verify-time whether a Integer or Number will be pushed.
Also we now directly pass a Value to stack_push.
Also we now fast-path setting integer properties on arrays.
#15485 seems to start a little faster (by about a second), but it was inconsistent enough that it could have just been noise.
I found a regression derpy FPS test.zip
thread 'main' panicked at core\src\avm2\property_map.rs:70:13: internal error: entered unreachable code: Lookup on lazy Multiname should never happen (Multiname { ns: Multiple([]), name: Some("rslProgressHandler"), param: None, flags: MultinameFlags(HAS_LAZY_NS | IS_QNAME) }) note: run with RUST_BACKTRACE=1 environment variable to display a backtrace AVM2 stack trace: at mx.managers::SystemManager/http://www.adobe.com/2006/flex/mx/internal::initialize() at mx.managers::SystemManager/initHandler()