OSDN Git Service

Optimizing: Use more X86 3 operand multiplies
authorMark Mendell <mark.p.mendell@intel.com>
Mon, 27 Jul 2015 20:13:10 +0000 (16:13 -0400)
committerMark Mendell <mark.p.mendell@intel.com>
Tue, 28 Jul 2015 19:54:05 +0000 (15:54 -0400)
commit4a2aa4af61e653a89f88d776dcdc55f6c7ca05f2
treec2821abad2247064094e9b2116c7ea727b63384c
parent595335100a947693b9af5fb6c0b5b3c1f0b91788
Optimizing: Use more X86 3 operand multiplies

The X86_64 code generator generated 3 operand multiplies for long
multiplication only.  Add support for 3 operand multiplication for
int as well for both X86 and X86_64.

Note that the RHS operand must be a 32 bit constant, and that it is
possible for the constant to end up in a register (!) due to a previous
use by another instruction.  Handle this case by checking the operand,
otherwise the first input might not be the same as the output, due to
the use of Any().

Also allow stack operands for multiplication.

Change-Id: I8f3d14cc01e9a91210f418258aa18065ee87979d
Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
compiler/optimizing/code_generator_x86.cc
compiler/optimizing/code_generator_x86_64.cc
compiler/utils/x86/assembler_x86.cc
compiler/utils/x86/assembler_x86.h
compiler/utils/x86_64/assembler_x86_64.cc
compiler/utils/x86_64/assembler_x86_64.h