-
Ng Zhi An authored
When filling stack slots, the start offset can be too large to fit into the immediate of a str instruction (which is used to handle remainders after stp). For example, a function with 32 i64 params will require 256 bytes reserved for the params, so the offset starts at 256 + 16 (instance) = 272. This does not fit into a int9, so we hit an UNREACHABLE case when emitting str. The fix here checks that start can fit in an unscaled immediate, and if it doesn't fallback to the general case. We could use the Str from macro-asesmbler, but that uses another instruction, so we are not saving anything. A check for IsImmLSUnscaled(-start-12) is sufficient because 12 is the largest possible value for remainder. So if -start-12 fits, everything else will fit. Bug: v8:10645 Change-Id: I1c415499ada3a807d5f3889f091150bfefdf471d Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2267369 Commit-Queue: Zhi An Ng <zhin@chromium.org> Reviewed-by: Clemens Backes <clemensb@chromium.org> Cr-Commit-Position: refs/heads/master@{#68594}
c92e74fa