| Index: src/x64/macro-assembler-x64.cc
|
| diff --git a/src/x64/macro-assembler-x64.cc b/src/x64/macro-assembler-x64.cc
|
| index b5b7324be0af31dbe9e1a0b0b760d9c17190a282..d62cdceef9fb67a70df1a3fd33ad25c34a8f082d 100644
|
| --- a/src/x64/macro-assembler-x64.cc
|
| +++ b/src/x64/macro-assembler-x64.cc
|
| @@ -3139,8 +3139,8 @@ void MacroAssembler::ClampUint8(Register reg) {
|
| Label done;
|
| testl(reg, Immediate(0xFFFFFF00));
|
| j(zero, &done, Label::kNear);
|
| - setcc(negative, reg); // 1 if negative, 0 if positive.
|
| - decb(reg); // 0 if negative, 255 if positive.
|
| + sarl(reg, Immediate(31));
|
| + notl(reg); // No zero extension seems to be safe here.
|
| bind(&done);
|
| }
|
|
|
| @@ -3156,16 +3156,14 @@ void MacroAssembler::ClampDoubleToUint8(XMMRegister input_reg,
|
| j(zero, &done, Label::kNear);
|
| cmpl(result_reg, Immediate(1));
|
| j(overflow, &conv_failure, Label::kNear);
|
| - movl(result_reg, Immediate(0));
|
| - setcc(sign, result_reg);
|
| - subl(result_reg, Immediate(1));
|
| - andl(result_reg, Immediate(255));
|
| + sarl(result_reg, Immediate(31));
|
| + notl(result_reg); // No zero extension seems to be safe here.
|
| jmp(&done, Label::kNear);
|
| bind(&conv_failure);
|
| - Set(result_reg, 0);
|
| + sarl(result_reg, Immediate(31));
|
| ucomisd(input_reg, temp_xmm_reg);
|
| - j(below, &done, Label::kNear);
|
| - Set(result_reg, 255);
|
| + j(above_equal, &done, Label::kNear);
|
| + Set(result_reg, 0);
|
| bind(&done);
|
| }
|
|
|
|
|