@@ -128,6 +128,15 @@ struct InterpMethod {
128
128
void **data_items;
129
129
*/
130
130
131
+ const enum JiterpSpecialOpcode {
132
+ CNE_UN_R4 = 0xFFFF + 0 ,
133
+ CGE_UN_R4 = 0xFFFF + 1 ,
134
+ CLE_UN_R4 = 0xFFFF + 2 ,
135
+ CNE_UN_R8 = 0xFFFF + 3 ,
136
+ CGE_UN_R8 = 0xFFFF + 4 ,
137
+ CLE_UN_R8 = 0xFFFF + 5 ,
138
+ }
139
+
131
140
const enum BailoutReason {
132
141
Unknown ,
133
142
InterpreterTiering ,
@@ -1673,7 +1682,6 @@ function emit_fieldop (
1673
1682
case MintOpcode . MINT_LDSFLD_I4 :
1674
1683
// default
1675
1684
break ;
1676
- // FIXME: These cause grisu3 to break?
1677
1685
case MintOpcode . MINT_STFLD_R4 :
1678
1686
case MintOpcode . MINT_STSFLD_R4 :
1679
1687
case MintOpcode . MINT_LDFLD_R4 :
@@ -1901,6 +1909,12 @@ const intrinsicFpBinops : { [opcode: number] : WasmOpcode } = {
1901
1909
[ MintOpcode . MINT_CLT_UN_R8 ] : WasmOpcode . nop ,
1902
1910
[ MintOpcode . MINT_CLE_R4 ] : WasmOpcode . f64_promote_f32 ,
1903
1911
[ MintOpcode . MINT_CLE_R8 ] : WasmOpcode . nop ,
1912
+ [ JiterpSpecialOpcode . CGE_UN_R4 ] : WasmOpcode . f64_promote_f32 ,
1913
+ [ JiterpSpecialOpcode . CLE_UN_R4 ] : WasmOpcode . f64_promote_f32 ,
1914
+ [ JiterpSpecialOpcode . CNE_UN_R4 ] : WasmOpcode . f64_promote_f32 ,
1915
+ [ JiterpSpecialOpcode . CGE_UN_R8 ] : WasmOpcode . nop ,
1916
+ [ JiterpSpecialOpcode . CLE_UN_R8 ] : WasmOpcode . nop ,
1917
+ [ JiterpSpecialOpcode . CNE_UN_R8 ] : WasmOpcode . nop ,
1904
1918
} ;
1905
1919
1906
1920
const binopTable : { [ opcode : number ] : OpRec3 | OpRec4 | undefined } = {
@@ -2021,7 +2035,8 @@ const relopbranchTable : { [opcode: number]: [comparisonOpcode: MintOpcode, imme
2021
2035
[ MintOpcode . MINT_BLE_UN_I8_S ] : MintOpcode . MINT_CLE_UN_I8 ,
2022
2036
2023
2037
[ MintOpcode . MINT_BEQ_I8_IMM_SP ] : [ MintOpcode . MINT_CEQ_I8 , WasmOpcode . i64_const , true ] ,
2024
- [ MintOpcode . MINT_BNE_UN_I8_IMM_SP ] : [ MintOpcode . MINT_CNE_I8 , WasmOpcode . i64_const , true ] ,
2038
+ // FIXME: Missing compare opcode
2039
+ // [MintOpcode.MINT_BNE_UN_I8_IMM_SP]: [MintOpcode.MINT_CNE_UN_I8, WasmOpcode.i64_const, true],
2025
2040
[ MintOpcode . MINT_BGT_I8_IMM_SP ] : [ MintOpcode . MINT_CGT_I8 , WasmOpcode . i64_const , true ] ,
2026
2041
[ MintOpcode . MINT_BGT_UN_I8_IMM_SP ] : [ MintOpcode . MINT_CGT_UN_I8 , WasmOpcode . i64_const , true ] ,
2027
2042
[ MintOpcode . MINT_BLT_I8_IMM_SP ] : [ MintOpcode . MINT_CLT_I8 , WasmOpcode . i64_const , true ] ,
@@ -2032,30 +2047,26 @@ const relopbranchTable : { [opcode: number]: [comparisonOpcode: MintOpcode, imme
2032
2047
[ MintOpcode . MINT_BLE_UN_I8_IMM_SP ] : [ MintOpcode . MINT_CLE_UN_I8 , WasmOpcode . i64_const , true ] ,
2033
2048
2034
2049
[ MintOpcode . MINT_BEQ_R4_S ] : MintOpcode . MINT_CEQ_R4 ,
2035
- [ MintOpcode . MINT_BNE_UN_R4_S ] : MintOpcode . MINT_CNE_R4 ,
2050
+ [ MintOpcode . MINT_BNE_UN_R4_S ] : < any > JiterpSpecialOpcode . CNE_UN_R4 ,
2036
2051
[ MintOpcode . MINT_BGT_R4_S ] : MintOpcode . MINT_CGT_R4 ,
2037
2052
[ MintOpcode . MINT_BGT_UN_R4_S ] : MintOpcode . MINT_CGT_UN_R4 ,
2038
2053
[ MintOpcode . MINT_BLT_R4_S ] : MintOpcode . MINT_CLT_R4 ,
2039
2054
[ MintOpcode . MINT_BLT_UN_R4_S ] : MintOpcode . MINT_CLT_UN_R4 ,
2040
2055
[ MintOpcode . MINT_BGE_R4_S ] : MintOpcode . MINT_CGE_R4 ,
2041
- // FIXME: No compare opcode for this
2042
- [ MintOpcode . MINT_BGE_UN_R4_S ] : MintOpcode . MINT_CGE_R4 ,
2056
+ [ MintOpcode . MINT_BGE_UN_R4_S ] : < any > JiterpSpecialOpcode . CGE_UN_R4 ,
2043
2057
[ MintOpcode . MINT_BLE_R4_S ] : MintOpcode . MINT_CLE_R4 ,
2044
- // FIXME: No compare opcode for this
2045
- [ MintOpcode . MINT_BLE_UN_R4_S ] : MintOpcode . MINT_CLE_R4 ,
2058
+ [ MintOpcode . MINT_BLE_UN_R4_S ] : < any > JiterpSpecialOpcode . CLE_UN_R4 ,
2046
2059
2047
2060
[ MintOpcode . MINT_BEQ_R8_S ] : MintOpcode . MINT_CEQ_R8 ,
2048
- [ MintOpcode . MINT_BNE_UN_R8_S ] : MintOpcode . MINT_CNE_R8 ,
2061
+ [ MintOpcode . MINT_BNE_UN_R8_S ] : < any > JiterpSpecialOpcode . CNE_UN_R8 ,
2049
2062
[ MintOpcode . MINT_BGT_R8_S ] : MintOpcode . MINT_CGT_R8 ,
2050
2063
[ MintOpcode . MINT_BGT_UN_R8_S ] : MintOpcode . MINT_CGT_UN_R8 ,
2051
2064
[ MintOpcode . MINT_BLT_R8_S ] : MintOpcode . MINT_CLT_R8 ,
2052
2065
[ MintOpcode . MINT_BLT_UN_R8_S ] : MintOpcode . MINT_CLT_UN_R8 ,
2053
2066
[ MintOpcode . MINT_BGE_R8_S ] : MintOpcode . MINT_CGE_R8 ,
2054
- // FIXME: No compare opcode for this
2055
- [ MintOpcode . MINT_BGE_UN_R8_S ] : MintOpcode . MINT_CGE_R8 ,
2067
+ [ MintOpcode . MINT_BGE_UN_R8_S ] : < any > JiterpSpecialOpcode . CGE_UN_R8 ,
2056
2068
[ MintOpcode . MINT_BLE_R8_S ] : MintOpcode . MINT_CLE_R8 ,
2057
- // FIXME: No compare opcode for this
2058
- [ MintOpcode . MINT_BLE_UN_R8_S ] : MintOpcode . MINT_CLE_R8 ,
2069
+ [ MintOpcode . MINT_BLE_UN_R8_S ] : < any > JiterpSpecialOpcode . CLE_UN_R8 ,
2059
2070
} ;
2060
2071
2061
2072
function emit_binop ( builder : WasmBuilder , ip : MintOpcodePtr , opcode : MintOpcode ) : boolean {
@@ -2466,14 +2477,14 @@ function emit_relop_branch (builder: WasmBuilder, ip: MintOpcodePtr, opcode: Min
2466
2477
const operandLoadOp = relopInfo
2467
2478
? relopInfo [ 1 ]
2468
2479
: (
2469
- intrinsicFpBinop == WasmOpcode . nop
2480
+ intrinsicFpBinop === WasmOpcode . nop
2470
2481
? WasmOpcode . f64_load
2471
2482
: WasmOpcode . f32_load
2472
2483
) ;
2473
2484
2474
2485
append_ldloc ( builder , getArgU16 ( ip , 1 ) , operandLoadOp ) ;
2475
2486
// Promote f32 lhs to f64 if necessary
2476
- if ( ! relopInfo && ( intrinsicFpBinop != WasmOpcode . nop ) )
2487
+ if ( ! relopInfo && ( intrinsicFpBinop !== WasmOpcode . nop ) )
2477
2488
builder . appendU8 ( intrinsicFpBinop ) ;
2478
2489
2479
2490
// Compare with immediate
0 commit comments