Oh ok I will add the smi check then, thank you! On Saturday, May 15, 2021 at 1:45:42 AM UTC-5 les...@chromium.org wrote:
> You could save a register and a TestEqual if you did two jumps (one for > x<a, one for x>=b) but otherwise there's not much you can do for a range > check. Keep in mind though that SwitchOnSmi does a range check itself (and > falls through on failure), so unless you want to exclude a range that's > inside your Switch range, you don't need a range check. > > Another thing to keep in mind is that SwitchOnSmi expects a Smi value in > the accumulator, so you'll need to add a Smi check to the bytecode handler. > Thankfully 'switch' comparison semantics are that of strict equality, so > afaict you don't need to add a ToPrimitive or anything like that, but I > think you might have to add an explicit -0 check before the Smi check. > > Hope that helps, happy to review when you get a patch together - this has > been on my backlog for literal years, so I'm glad to see someone else doing > it! > > - Leszek > > On Sat, 15 May 2021, 07:03 Mihir Shah, <mihirsh...@gmail.com> wrote: > >> Hi, >> >> I was working on a jump table implementation for switch statements with >> all constant Smi case labels (in the parse step, instead of generating the >> traditional if-else-if kind of logic), and needed to do range checking at >> the top. >> >> I was wondering, then, was there a better way to do range checking, i.e. >> does value in accumulator register x lie in range (known at compile time) >> [a,b]? I think the standard trick of reducing a<=x<=b to 0<=x-a<=b-a and >> then doing unsigned comparison here would not work because Smi is signed. >> >> Because right now my idea of the bytecode is something like this (which >> feels very inefficient): >> >> Load x into accumulator and register r1 ... >> TestLessThan [b] >> Star [r2] >> Ldar [r1] >> TestGreaterThan [a] >> TestEqual [r2] >> JumpIfFalse <after the switch> >> Ldar [r1] >> >> ... proceed with SwitchOnSmi... >> >> Thank you! >> >> >> -- >> -- >> v8-dev mailing list >> v8-...@googlegroups.com >> http://groups.google.com/group/v8-dev >> --- >> You received this message because you are subscribed to the Google Groups >> "v8-dev" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to v8-dev+un...@googlegroups.com. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/v8-dev/6df36377-1d02-4de9-aec4-5890003af416n%40googlegroups.com >> >> <https://groups.google.com/d/msgid/v8-dev/6df36377-1d02-4de9-aec4-5890003af416n%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> > -- -- v8-dev mailing list v8-dev@googlegroups.com http://groups.google.com/group/v8-dev --- You received this message because you are subscribed to the Google Groups "v8-dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to v8-dev+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/v8-dev/c13b5944-b672-43dd-80f8-3685a76339fan%40googlegroups.com.