• Pierre Langlois's avatar
    [arm] Cleanup addrmod1 encoding and Operand class · 30a29fa2
    Pierre Langlois authored
    This cleanup is the result of trying to modify the `Assembler::addrmod1` method
    and realising it's very easy to break it. It handles three groups of
    instructions with different operands and uses `r0` when a register is not used:
    
    - General case:            rd, rn, (rm|rm shift #imm|rm shift rs)
    - Comparison instructions:     rn, (rm|rm shift #imm|rm shift rs)
    - Move instructions        rd,     (rm|rm shift #imm|rm shift rs)
    
    Let's use `no_reg` instead of `r0` with explicit checks and assertions so that
    it's clear this method is used with multiple types of instructions.
    Additionaly, keep the order of operands as "rd", "rn", "rm".
    
    As drive-by fixes, I've taken the opportunity to add a few helper methods to the
    `Operand` class.
    
    Bug: 
    Change-Id: If8140d804bc90dea1d3c186b3cee54297f91462a
    Reviewed-on: https://chromium-review.googlesource.com/531284
    Commit-Queue: Georg Neis <neis@chromium.org>
    Reviewed-by: 's avatarJaroslav Sevcik <jarin@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#45949}
    30a29fa2
assembler-arm.h 70.2 KB