• epertoso's avatar
    [turbofan] Byte and word memory operands in x64 cmp/test. Fixes arithmetic_op_8 in assembler-x64.cc · 165b68e2
    epertoso authored
    Currently, if the size of two cmp or test operands is a byte or a word, we sign-extend or zero-extend each of them into a 32-bit register before doing the comparison, even when the conditions for the use of a memory operand are met.
    
    This CL makes it possible to load only one of them into a register and address the other as a memory operand.
    
    Meanwhile, comparisons between Uint8 values in the string relational comparison stubs are done with Uint32LessThan (previously we were always zero-extending the byte to a 32-bit value, so signed comparison was alright).
    
    Found that Assembler::arithmetic_op_8(byte, Register, const Operand&) wasn't taking the Operand's rex_ field into account, so I fixed that too.
    
    BUG=
    
    Review URL: https://codereview.chromium.org/1780193003
    
    Cr-Commit-Position: refs/heads/master@{#34862}
    165b68e2
assembler-x64.h 78.9 KB