| Index: src/mips/simulator-mips.cc
|
| diff --git a/src/mips/simulator-mips.cc b/src/mips/simulator-mips.cc
|
| index 10417d573cfa2ae8b1f2e06587c2615e67cd2ef6..efce887c2e6d4e5f7ef21e07246b1118114ec6de 100644
|
| --- a/src/mips/simulator-mips.cc
|
| +++ b/src/mips/simulator-mips.cc
|
| @@ -1926,7 +1926,11 @@ void Simulator::ConfigureTypeRegister(Instruction* instr,
|
| alu_out = rs_u * rt_u; // Only the lower 32 bits are kept.
|
| break;
|
| case CLZ:
|
| - alu_out = __builtin_clz(rs_u);
|
| + // MIPS32 spec: If no bits were set in GPR rs, the result written to
|
| + // GPR rd is 32.
|
| + // GCC __builtin_clz: If input is 0, the result is undefined.
|
| + alu_out =
|
| + rs_u == 0 ? 32 : CompilerIntrinsics::CountLeadingZeros(rs_u);
|
| break;
|
| default:
|
| UNREACHABLE();
|
|
|