@@ -957,18 +957,26 @@ int CheckJSDataViewBounds::MaxCallStackArgs() const { return 1; }
957957void CheckJSDataViewBounds::SetValueLocationConstraints () {
958958 UseRegister (IndexInput ());
959959 UseRegister (ByteLengthInput ());
960+ int element_size = compiler::ExternalArrayElementSize (element_type_);
961+ if (element_size > 1 ) {
962+ set_temporaries_needed (1 );
963+ }
960964}
961965void CheckJSDataViewBounds::GenerateCode (MaglevAssembler* masm,
962966 const ProcessingState& state) {
963967 Register index = ToRegister (IndexInput ());
964968 Register byte_length = ToRegister (ByteLengthInput ());
965969
970+ MaglevAssembler::TemporaryRegisterScope temps (masm);
971+ Register limit = byte_length;
972+
966973 int element_size = compiler::ExternalArrayElementSize (element_type_);
967974 if (element_size > 1 ) {
968- __ sub (byte_length, byte_length, Operand (element_size - 1 ), SetCC);
975+ limit = temps.Acquire ();
976+ __ sub (limit, byte_length, Operand (element_size - 1 ), SetCC);
969977 __ EmitEagerDeoptIf (mi, DeoptimizeReason::kOutOfBounds , this );
970978 }
971- __ cmp (index, byte_length );
979+ __ cmp (index, limit );
972980 __ EmitEagerDeoptIf (hs, DeoptimizeReason::kOutOfBounds , this );
973981}
974982
0 commit comments