Skip to content

Commit 16cda77

Browse files
committed
interpreter support for f32.min/max
1 parent 192bab2 commit 16cda77

File tree

6 files changed

+22
-15
lines changed

6 files changed

+22
-15
lines changed

lib/Backend/IRBuilderAsmJs.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2872,6 +2872,14 @@ IRBuilderAsmJs::BuildFloat3(Js::OpCodeAsmJs newOpcode, uint32 offset, Js::RegSlo
28722872
instr = IR::Instr::New(Js::OpCode::Div_A, dstOpnd, src1Opnd, src2Opnd, m_func);
28732873
break;
28742874

2875+
case Js::OpCodeAsmJs::Min_Flt:
2876+
instr = IR::Instr::New(Js::OpCode::InlineMathMin, dstOpnd, src1Opnd, src2Opnd, m_func);
2877+
break;
2878+
2879+
case Js::OpCodeAsmJs::Max_Flt:
2880+
instr = IR::Instr::New(Js::OpCode::InlineMathMax, dstOpnd, src1Opnd, src2Opnd, m_func);
2881+
break;
2882+
28752883
default:
28762884
Assume(UNREACHED);
28772885
}

lib/Runtime/ByteCode/OpCodesAsmJs.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -208,8 +208,8 @@ MACRO_WMS ( Abs_Flt , Float2 , None )
208208
MACRO_WMS ( Atan2_Db , Double3 , None )
209209
MACRO_WMS ( Min_Db , Double3 , None )
210210
MACRO_WMS ( Max_Db , Double3 , None )
211-
MACRO_WMS ( Min_Flt , Float2 , None )
212-
MACRO_WMS ( Max_Flt , Float2 , None )
211+
MACRO_WMS ( Min_Flt , Float3 , None )
212+
MACRO_WMS ( Max_Flt , Float3 , None )
213213

214214
// Fround
215215
MACRO_WMS ( Fround_Flt , Float2 , None )

lib/Runtime/Language/AsmJsEncoderHandler.inl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,7 @@ EXDEF3 ( CUSTOM , NopEx , OP_Empty , Empty
193193
DEF3_WMS( CALLDOUBLE3, Min_Db , AsmJsMath::Min<double> , false )
194194
DEF3_WMS( CALLDOUBLE3, Max_Db , AsmJsMath::Max<double> , false )
195195

196+
196197
DEF3_WMS( CUSTOM , Fround_Flt , OP_SetFroundFlt , Float2 )
197198
DEF3_WMS( CUSTOM , Fround_Db , OP_SetFroundDb , Float1Double1 )
198199
DEF3_WMS( CUSTOM , Fround_Int , OP_SetFroundInt , Float1Int1 )

lib/Runtime/Language/InterpreterHandlerAsmJs.inl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -160,9 +160,9 @@ EXDEF2 (NOPASMJS , NopEx , Empty
160160
DEF2_WMS( F1toF1Mem , Abs_Flt , ::fabsf )
161161
DEF2_WMS( D2toD1Mem , Atan2_Db , Math::Atan2 )
162162
DEF2_WMS( D2toD1Mem , Min_Db , AsmJsMath::Min<double> )
163-
DEF2_WMS( D2toD1Mem , Min_Flt , AsmJsMath::Min<float> )
163+
DEF2_WMS( F2toF1Mem , Min_Flt , AsmJsMath::Min<float> )
164164
DEF2_WMS( D2toD1Mem , Max_Db , AsmJsMath::Max<double> )
165-
DEF2_WMS( D2toD1Mem , Max_Flt , AsmJsMath::Max<float> )
165+
DEF2_WMS( F2toF1Mem , Max_Flt , AsmJsMath::Max<float> )
166166

167167

168168
DEF2_WMS( F1toF1Mem , Fround_Flt , (float) )

lib/Runtime/Math/AsmJsMath.inl

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,21 +15,21 @@ namespace Js
1515
{
1616
if (NumberUtilities::IsNan(aLeft) || NumberUtilities::IsNan(aRight))
1717
{
18-
return NumberConstants::NaN;
18+
return (T)NumberConstants::NaN;
1919
}
2020
return aLeft < aRight ? aLeft : aRight;
2121
}
2222

2323
template<>
2424
__inline double AsmJsMath::Min<double>(double aLeft, double aRight)
2525
{
26-
return minCheckNan<double>(aLeft, aRight);
26+
return minCheckNan(aLeft, aRight);
2727
}
2828

2929
template<>
3030
__inline float AsmJsMath::Min<float>(float aLeft, float aRight)
3131
{
32-
return minCheckNan<float>(aLeft, aRight);
32+
return minCheckNan(aLeft, aRight);
3333
}
3434

3535
template<typename T>
@@ -43,21 +43,21 @@ namespace Js
4343
{
4444
if (NumberUtilities::IsNan(aLeft) || NumberUtilities::IsNan(aRight))
4545
{
46-
return NumberConstants::NaN;
46+
return (T)NumberConstants::NaN;
4747
}
4848
return aLeft > aRight ? aLeft : aRight;
4949
}
5050

5151
template<>
5252
__inline double AsmJsMath::Max<double>(double aLeft, double aRight)
5353
{
54-
maxCheckNan<double>(aLeft, aRight);
54+
return maxCheckNan(aLeft, aRight);
5555
}
5656

5757
template<>
58-
__inline float AsmJsMath::Min<float>(float aLeft, float aRight)
58+
__inline float AsmJsMath::Max<float>(float aLeft, float aRight)
5959
{
60-
maxCheckNan<float>(aLeft, aRight);
60+
return maxCheckNan(aLeft, aRight);
6161
}
6262

6363
template<typename T>

lib/WasmReader/WasmKeywords.h

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -107,12 +107,10 @@ WASM_KEYWORD_BIN_MATH_I(DIVU, divu, Div_UInt)
107107
WASM_KEYWORD_BIN_MATH_I(MODU, modu, Rem_UInt)
108108

109109
WASM_KEYWORD_BIN_MATH_FD(DIV, div, Div)
110-
WASM_KEYWORD_BIN_MATH_FD(MIN, min, Min_Flt)
111-
WASM_KEYWORD_BIN_MATH_FD(MAX, max, Max_Flt)
110+
WASM_KEYWORD_BIN_MATH_FD(MIN, min, Min)
111+
WASM_KEYWORD_BIN_MATH_FD(MAX, max, Max)
112112

113113
WASM_KEYWORD_BIN_MATH_D(MOD, mod, Rem_Db)
114-
WASM_KEYWORD_BIN_MATH_D(MIN, min, Min_Db)
115-
WASM_KEYWORD_BIN_MATH_D(MAX, max, Max_Db)
116114

117115

118116
// compare ops

0 commit comments

Comments
 (0)