Просмотр исходного кода

Remove Mul_UInt in asm.js as it is unused and there is no difference signed/unsigned multiplication

Michael Ferris 8 лет назад
Родитель
Сommit
d9903ea887

+ 0 - 3
lib/Backend/IRBuilderAsmJs.cpp

@@ -2396,9 +2396,6 @@ IRBuilderAsmJs::BuildInt3(Js::OpCodeAsmJs newOpcode, uint32 offset, Js::RegSlot
         instr = IR::Instr::New(Js::OpCode::Sub_I4, dstOpnd, src1Opnd, src2Opnd, m_func);
         break;
 
-    case Js::OpCodeAsmJs::Mul_UInt:
-        src1Opnd->SetType(TyUint32);
-        src2Opnd->SetType(TyUint32);
     case Js::OpCodeAsmJs::Mul_Int:
         instr = IR::Instr::New(Js::OpCode::Mul_I4, dstOpnd, src1Opnd, src2Opnd, m_func);
         break;

+ 0 - 1
lib/Runtime/ByteCode/OpCodesAsmJs.h

@@ -151,7 +151,6 @@ MACRO_WMS       ( Ror_Int                    , Int3            , None
 MACRO_WMS       ( PopCnt_Int                 , Int2            , None            )
 
 // Unsigned int math
-MACRO_WMS       ( Mul_UInt                   , Int3            , None            ) // uint32 Arithmetic '*'
 MACRO_WMS       ( Div_UInt                   , Int3            , None            ) // uint32 Arithmetic '/'
 MACRO_WMS       ( Div_Check_UInt             , Int3            , None            ) // (checked) uint32 Arithmetic '/'
 MACRO_WMS       ( Rem_UInt                   , Int3            , None            ) // uint32 Arithmetic '%'

+ 0 - 1
lib/Runtime/Language/AsmJsEncoderHandler.inl

@@ -121,7 +121,6 @@ EXDEF3    ( CUSTOM     , InvalidOpCode     , OP_Empty                , Empty
   DEF3_WMS( INT3       , Shr_Int           , Shr_Int                 , Int3          )
   DEF3_WMS( INT3       , Shr_UInt          , Shr_UInt                , Int3          )
 
-  DEF3_WMS( INT3       , Mul_UInt          , Mul_UInt                , Int3          )
   DEF3_WMS( INT3       , Div_UInt          , Div_UInt                , Int3          )
   DEF3_WMS( INT3       , Rem_UInt          , Rem_UInt                , Int3          )
 

+ 0 - 1
lib/Runtime/Language/AsmJsJitTemplate.h

@@ -97,7 +97,6 @@ namespace Js
 
         // uint operations
         CreateTemplate( Div_UInt, int targetOffset, int leftOffset, int rightOffset );
-        CreateTemplate( Mul_UInt, int targetOffset, int leftOffset, int rightOffset );
         CreateTemplate( Rem_UInt, int targetOffset, int leftOffset, int rightOffset );
 
         CreateTemplate( Lt_UInt, int targetOffset, int leftOffset, int rightOffset );

+ 0 - 1
lib/Runtime/Language/InterpreterHandlerAsmJs.inl

@@ -120,7 +120,6 @@ EXDEF2    (NOPASMJS          , InvalidOpCode, Empty
   DEF2_WMS( I2toI1Mem        , Ror_Int      , Wasm::WasmMath::Ror                                )
   DEF2_WMS( I1toI1Mem        , PopCnt_Int   , ::Math::PopCnt32                                   )
 
-  DEF2_WMS( I2toI1Mem        , Mul_UInt     , AsmJsMath::Mul<uint>                               )
   DEF2_WMS( I2toI1Mem        , Div_UInt     , AsmJsMath::Div<uint>                               )
   DEF2_WMS( I2toI1Mem        , Rem_UInt     , AsmJsMath::Rem<uint>                               )
 

+ 0 - 74
lib/Runtime/Language/i386/AsmJsJitTemplate.cpp

@@ -2291,80 +2291,6 @@ namespace Js
             return size;
         }
 
-        int Mul_UInt::ApplyTemplate( TemplateContext context, BYTE*& buffer, int targetOffset, int leftOffset, int rightOffset )
-        {
-            X86TemplateData* templateData = GetTemplateData( context );
-            int size = 0;
-            targetOffset -= templateData->GetBaseOffSet();
-            leftOffset -= templateData->GetBaseOffSet();
-            rightOffset -= templateData->GetBaseOffSet();
-
-            RegNum reg1, reg2;
-            const int reg1Found = templateData->FindRegWithStackOffset<int>( reg1, rightOffset, 1<<RegEDX );
-            const int reg2Found = templateData->FindRegWithStackOffset<int>( reg2, leftOffset, 1<<RegEDX );
-
-            size += XOR::EncodeInstruction<int>( buffer, InstrParams2Reg(RegEDX,RegEDX) );
-            switch( reg1Found & ( reg2Found << 1 ) )
-            {
-            case 0: // none found
-                reg1 = RegEAX;
-                size += MOV::EncodeInstruction<int>( buffer, InstrParamsRegAddr( reg1, RegEBP, leftOffset ) );
-                templateData->SetStackInfo( reg1, leftOffset );
-                size += MUL::EncodeInstruction<int>( buffer, InstrParamsAddr(RegEBP, rightOffset) );
-                break;
-            case 1: // found 2
-                if( reg2 == RegEAX )
-                {
-                    size += MUL::EncodeInstruction<int>( buffer, InstrParamsAddr(RegEBP, leftOffset) );
-                }
-                else
-                {
-                    size += MOV::EncodeInstruction<int>( buffer, InstrParamsRegAddr( RegEAX, RegEBP, leftOffset ) );
-                    size += MUL::EncodeInstruction<int>( buffer, InstrParamsReg(reg2) );
-                }
-                break;
-            case 2: // found 1
-                if( reg1 == RegEAX )
-                {
-                    size += MUL::EncodeInstruction<int>( buffer, InstrParamsAddr(RegEBP, rightOffset) );
-                }
-                else
-                {
-                    size += MOV::EncodeInstruction<int>( buffer, InstrParamsRegAddr( RegEAX, RegEBP, rightOffset ) );
-                    size += MUL::EncodeInstruction<int>( buffer, InstrParamsReg(reg1) );
-                }
-                break;
-            case 3: // found both
-                if( reg1 == RegEAX )
-                {
-                    size += MUL::EncodeInstruction<int>( buffer, InstrParamsReg(reg2) );
-                }
-                else if( reg2 == RegEAX )
-                {
-                    size += MUL::EncodeInstruction<int>( buffer, InstrParamsReg(reg1) );
-                }
-                else
-                {
-                    size += MOV::EncodeInstruction<int>( buffer, InstrParams2Reg( RegEAX, reg1 ) );
-                    size += MUL::EncodeInstruction<int>( buffer, InstrParamsReg(reg2) );
-                }
-                break;
-            default:
-                __assume( false );
-            }
-
-            size += TEST::EncodeInstruction<int>( buffer, InstrParams2Reg( RegEDX, RegEDX ) );
-            JumpRelocation reloc;
-            EncodingHelpers::EncodeShortJump<JE>( buffer, reloc, &size );
-            size += XOR::EncodeInstruction<int>( buffer, InstrParams2Reg( RegEAX, RegEAX ) );
-            reloc.ApplyReloc<int8>();
-            templateData->InvalidateReg( RegEDX );
-
-            size += EncodingHelpers::SetStackReg<int>( buffer, templateData, targetOffset , RegEAX);
-
-            return size;
-        }
-
         int Div_UInt::ApplyTemplate( TemplateContext context, BYTE*& buffer, int targetOffset, int leftOffset, int rightOffset )
         {
             X86TemplateData* templateData = GetTemplateData( context );