Description[turbofan] Byte and word memory operands in x64 cmp/test. Fixes arithmetic_op_8 in assembler-x64.cc
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=
Committed: https://crrev.com/165b68e227cebe664c9bb8d1faf9357ce22d0a0f
Cr-Commit-Position: refs/heads/master@{#34862}
Patch Set 1 #Patch Set 2 : Update. #
Total comments: 2
Patch Set 3 : Update. #Patch Set 4 : Fixes cmpb. #
Messages
Total messages: 22 (11 generated)
|