ARM64: Fix LCodeGen::ToOperand32.

This fixes the following generated code sequence:
  movn w1, #0     // Synthesize -1.
  cmp w0, w1

With a properly-constructed Operand, the MacroAssembler can optimize it
as follows:
  cmn w0, #1

BUG=
R=ulan@chromium.org

Review URL: https://codereview.chromium.org/253513003

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@20989 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
Jacob.Bramley@arm.com 2014-04-25 14:07:45 +00:00
parent 81a101678f
commit 486a9fdb3f

View File

@ -1235,9 +1235,9 @@ Operand LCodeGen::ToOperand32(LOperand* op, IntegerSignedness signedness) {
Representation r = chunk_->LookupLiteralRepresentation(const_op); Representation r = chunk_->LookupLiteralRepresentation(const_op);
if (r.IsInteger32()) { if (r.IsInteger32()) {
ASSERT(constant->HasInteger32Value()); ASSERT(constant->HasInteger32Value());
return Operand(signedness == SIGNED_INT32 return (signedness == SIGNED_INT32)
? constant->Integer32Value() ? Operand(constant->Integer32Value())
: static_cast<uint32_t>(constant->Integer32Value())); : Operand(static_cast<uint32_t>(constant->Integer32Value()));
} else { } else {
// Other constants not implemented. // Other constants not implemented.
Abort(kToOperand32UnsupportedImmediate); Abort(kToOperand32UnsupportedImmediate);