| # Copyright (C) 2015 Apple Inc. All rights reserved. |
| # |
| # Redistribution and use in source and binary forms, with or without |
| # modification, are permitted provided that the following conditions |
| # are met: |
| # 1. Redistributions of source code must retain the above copyright |
| # notice, this list of conditions and the following disclaimer. |
| # 2. Redistributions in binary form must reproduce the above copyright |
| # notice, this list of conditions and the following disclaimer in the |
| # documentation and/or other materials provided with the distribution. |
| # |
| # THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' |
| # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, |
| # THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
| # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS |
| # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
| # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
| # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
| # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
| # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
| # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF |
| # THE POSSIBILITY OF SUCH DAMAGE. |
| |
| matcher AddressMatcher |
| |
| # Note that this relies on B3 doing aggressive reassociation and canoncalization of integer adds. |
| # We'll never see Add(Add(x, const1), const2) because it would have already been reassociated into |
| # Add(x, const1 + const2). Also, we will never see Add(const, x), because we would have canonicalized |
| # it to Add(x, const). That said, in this code we never make assertions about these optimizations |
| # having been performed. Also, since the Load/Store instructions in B3 have a built-in offset, we |
| # don't need to match Add(x, const). That would have been folded into the Load/Store instructions |
| # already. So, the only fancy mathing this can do is just BaseIndex forms. |
| |
| AddShift1 = Add(Shl(index, $logScale), base) |
| AddShift2 = Add(base, Shl(index, $logScale)) |
| |
| Add = Add(left, right) |
| |
| Direct |