Chromium Code Reviews| Index: src/arm/macro-assembler-arm.cc | 
| diff --git a/src/arm/macro-assembler-arm.cc b/src/arm/macro-assembler-arm.cc | 
| index 0be9722ca87434174130e45f391ef787c14936f5..4d7198bff68bb108dd9032c44ef8666ebf37dae3 100644 | 
| --- a/src/arm/macro-assembler-arm.cc | 
| +++ b/src/arm/macro-assembler-arm.cc | 
| @@ -3684,10 +3684,15 @@ void MacroAssembler::ClampDoubleToUint8(Register result_reg, | 
| // In 0-255 range, round and truncate. | 
| bind(&in_bounds); | 
| - Vmov(temp_double_reg, 0.5); | 
| - vadd(temp_double_reg, input_reg, temp_double_reg); | 
| - vcvt_u32_f64(temp_double_reg.low(), temp_double_reg); | 
| - vmov(result_reg, temp_double_reg.low()); | 
| + // Save FPSCR. | 
| + vmrs(ip); | 
| + // Set rounding mode to round to the nearest integer by clearing bits[23:22]. | 
| + bic(result_reg, ip, Operand(kVFPRoundingModeMask)); | 
| + vmsr(result_reg); | 
| + vcvt_s32_f64(input_reg.low(), input_reg, kFPSCRRounding); | 
| + vmov(result_reg, input_reg.low()); | 
| + // Restore FPSCR. | 
| + vmsr(ip); | 
| 
 
Yang
2012/08/22 07:57:07
Could you use EmitVFPTruncate instead? I'm not ent
 
ulan
2012/08/22 13:48:17
The number here is in 0-255 range, so there should
 
 | 
| bind(&done); | 
| } |