@@ -65,19 +65,19 @@ pub fn translate_operator<FE: FuncEnvironment + ?Sized>(
65
65
* `get_local` and `set_local` are treated as non-SSA variables and will completely
66
66
* disappear in the Cranelift Code
67
67
***********************************************************************************/
68
- Operator :: GetLocal { local_index } => {
68
+ Operator :: LocalGet { local_index } => {
69
69
let val = builder. use_var ( Variable :: with_u32 ( * local_index) ) ;
70
70
state. push1 ( val) ;
71
71
let label = ValueLabel :: from_u32 ( * local_index) ;
72
72
builder. set_val_label ( val, label) ;
73
73
}
74
- Operator :: SetLocal { local_index } => {
74
+ Operator :: LocalSet { local_index } => {
75
75
let val = state. pop1 ( ) ;
76
76
builder. def_var ( Variable :: with_u32 ( * local_index) , val) ;
77
77
let label = ValueLabel :: from_u32 ( * local_index) ;
78
78
builder. set_val_label ( val, label) ;
79
79
}
80
- Operator :: TeeLocal { local_index } => {
80
+ Operator :: LocalTee { local_index } => {
81
81
let val = state. peek1 ( ) ;
82
82
builder. def_var ( Variable :: with_u32 ( * local_index) , val) ;
83
83
let label = ValueLabel :: from_u32 ( * local_index) ;
@@ -86,7 +86,7 @@ pub fn translate_operator<FE: FuncEnvironment + ?Sized>(
86
86
/********************************** Globals ****************************************
87
87
* `get_global` and `set_global` are handled by the environment.
88
88
***********************************************************************************/
89
- Operator :: GetGlobal { global_index } => {
89
+ Operator :: GlobalGet { global_index } => {
90
90
let val = match state. get_global ( builder. func , * global_index, environ) ? {
91
91
GlobalVariable :: Const ( val) => val,
92
92
GlobalVariable :: Memory { gv, offset, ty } => {
@@ -97,7 +97,7 @@ pub fn translate_operator<FE: FuncEnvironment + ?Sized>(
97
97
} ;
98
98
state. push1 ( val) ;
99
99
}
100
- Operator :: SetGlobal { global_index } => {
100
+ Operator :: GlobalSet { global_index } => {
101
101
match state. get_global ( builder. func , * global_index, environ) ? {
102
102
GlobalVariable :: Const ( _) => panic ! ( "global #{} is a constant" , * global_index) ,
103
103
GlobalVariable :: Memory { gv, offset, ty } => {
@@ -639,11 +639,11 @@ pub fn translate_operator<FE: FuncEnvironment + ?Sized>(
639
639
let arg = state. pop1 ( ) ;
640
640
state. push1 ( builder. ins ( ) . popcnt ( arg) ) ;
641
641
}
642
- Operator :: I64ExtendSI32 => {
642
+ Operator :: I64ExtendI32S => {
643
643
let val = state. pop1 ( ) ;
644
644
state. push1 ( builder. ins ( ) . sextend ( I64 , val) ) ;
645
645
}
646
- Operator :: I64ExtendUI32 => {
646
+ Operator :: I64ExtendI32U => {
647
647
let val = state. pop1 ( ) ;
648
648
state. push1 ( builder. ins ( ) . uextend ( I64 , val) ) ;
649
649
}
@@ -679,19 +679,19 @@ pub fn translate_operator<FE: FuncEnvironment + ?Sized>(
679
679
let arg = state. pop1 ( ) ;
680
680
state. push1 ( builder. ins ( ) . fneg ( arg) ) ;
681
681
}
682
- Operator :: F64ConvertUI64 | Operator :: F64ConvertUI32 => {
682
+ Operator :: F64ConvertI64U | Operator :: F64ConvertI32U => {
683
683
let val = state. pop1 ( ) ;
684
684
state. push1 ( builder. ins ( ) . fcvt_from_uint ( F64 , val) ) ;
685
685
}
686
- Operator :: F64ConvertSI64 | Operator :: F64ConvertSI32 => {
686
+ Operator :: F64ConvertI64S | Operator :: F64ConvertI32S => {
687
687
let val = state. pop1 ( ) ;
688
688
state. push1 ( builder. ins ( ) . fcvt_from_sint ( F64 , val) ) ;
689
689
}
690
- Operator :: F32ConvertSI64 | Operator :: F32ConvertSI32 => {
690
+ Operator :: F32ConvertI64S | Operator :: F32ConvertI32S => {
691
691
let val = state. pop1 ( ) ;
692
692
state. push1 ( builder. ins ( ) . fcvt_from_sint ( F32 , val) ) ;
693
693
}
694
- Operator :: F32ConvertUI64 | Operator :: F32ConvertUI32 => {
694
+ Operator :: F32ConvertI64U | Operator :: F32ConvertI32U => {
695
695
let val = state. pop1 ( ) ;
696
696
state. push1 ( builder. ins ( ) . fcvt_from_uint ( F32 , val) ) ;
697
697
}
@@ -703,35 +703,35 @@ pub fn translate_operator<FE: FuncEnvironment + ?Sized>(
703
703
let val = state. pop1 ( ) ;
704
704
state. push1 ( builder. ins ( ) . fdemote ( F32 , val) ) ;
705
705
}
706
- Operator :: I64TruncSF64 | Operator :: I64TruncSF32 => {
706
+ Operator :: I64TruncF64S | Operator :: I64TruncF32S => {
707
707
let val = state. pop1 ( ) ;
708
708
state. push1 ( builder. ins ( ) . fcvt_to_sint ( I64 , val) ) ;
709
709
}
710
- Operator :: I32TruncSF64 | Operator :: I32TruncSF32 => {
710
+ Operator :: I32TruncF64S | Operator :: I32TruncF32S => {
711
711
let val = state. pop1 ( ) ;
712
712
state. push1 ( builder. ins ( ) . fcvt_to_sint ( I32 , val) ) ;
713
713
}
714
- Operator :: I64TruncUF64 | Operator :: I64TruncUF32 => {
714
+ Operator :: I64TruncF64U | Operator :: I64TruncF32U => {
715
715
let val = state. pop1 ( ) ;
716
716
state. push1 ( builder. ins ( ) . fcvt_to_uint ( I64 , val) ) ;
717
717
}
718
- Operator :: I32TruncUF64 | Operator :: I32TruncUF32 => {
718
+ Operator :: I32TruncF64U | Operator :: I32TruncF32U => {
719
719
let val = state. pop1 ( ) ;
720
720
state. push1 ( builder. ins ( ) . fcvt_to_uint ( I32 , val) ) ;
721
721
}
722
- Operator :: I64TruncSSatF64 | Operator :: I64TruncSSatF32 => {
722
+ Operator :: I64TruncSatF64S | Operator :: I64TruncSatF32S => {
723
723
let val = state. pop1 ( ) ;
724
724
state. push1 ( builder. ins ( ) . fcvt_to_sint_sat ( I64 , val) ) ;
725
725
}
726
- Operator :: I32TruncSSatF64 | Operator :: I32TruncSSatF32 => {
726
+ Operator :: I32TruncSatF64S | Operator :: I32TruncSatF32S => {
727
727
let val = state. pop1 ( ) ;
728
728
state. push1 ( builder. ins ( ) . fcvt_to_sint_sat ( I32 , val) ) ;
729
729
}
730
- Operator :: I64TruncUSatF64 | Operator :: I64TruncUSatF32 => {
730
+ Operator :: I64TruncSatF64U | Operator :: I64TruncSatF32U => {
731
731
let val = state. pop1 ( ) ;
732
732
state. push1 ( builder. ins ( ) . fcvt_to_uint_sat ( I64 , val) ) ;
733
733
}
734
- Operator :: I32TruncUSatF64 | Operator :: I32TruncUSatF32 => {
734
+ Operator :: I32TruncSatF64U | Operator :: I32TruncSatF32U => {
735
735
let val = state. pop1 ( ) ;
736
736
state. push1 ( builder. ins ( ) . fcvt_to_uint_sat ( I32 , val) ) ;
737
737
}
@@ -918,9 +918,12 @@ pub fn translate_operator<FE: FuncEnvironment + ?Sized>(
918
918
let val = builder. ins ( ) . is_null ( arg) ;
919
919
state. push1 ( val) ;
920
920
}
921
- Operator :: Wake { .. }
922
- | Operator :: I32Wait { .. }
923
- | Operator :: I64Wait { .. }
921
+ Operator :: RefFunc { .. } => {
922
+ return Err ( wasm_unsupported ! ( "proposed ref operator {:?}" , op) )
923
+ }
924
+ Operator :: AtomicNotify { .. }
925
+ | Operator :: I32AtomicWait { .. }
926
+ | Operator :: I64AtomicWait { .. }
924
927
| Operator :: I32AtomicLoad { .. }
925
928
| Operator :: I64AtomicLoad { .. }
926
929
| Operator :: I32AtomicLoad8U { .. }
@@ -937,54 +940,54 @@ pub fn translate_operator<FE: FuncEnvironment + ?Sized>(
937
940
| Operator :: I64AtomicStore32 { .. }
938
941
| Operator :: I32AtomicRmwAdd { .. }
939
942
| Operator :: I64AtomicRmwAdd { .. }
940
- | Operator :: I32AtomicRmw8UAdd { .. }
941
- | Operator :: I32AtomicRmw16UAdd { .. }
942
- | Operator :: I64AtomicRmw8UAdd { .. }
943
- | Operator :: I64AtomicRmw16UAdd { .. }
944
- | Operator :: I64AtomicRmw32UAdd { .. }
943
+ | Operator :: I32AtomicRmw8AddU { .. }
944
+ | Operator :: I32AtomicRmw16AddU { .. }
945
+ | Operator :: I64AtomicRmw8AddU { .. }
946
+ | Operator :: I64AtomicRmw16AddU { .. }
947
+ | Operator :: I64AtomicRmw32AddU { .. }
945
948
| Operator :: I32AtomicRmwSub { .. }
946
949
| Operator :: I64AtomicRmwSub { .. }
947
- | Operator :: I32AtomicRmw8USub { .. }
948
- | Operator :: I32AtomicRmw16USub { .. }
949
- | Operator :: I64AtomicRmw8USub { .. }
950
- | Operator :: I64AtomicRmw16USub { .. }
951
- | Operator :: I64AtomicRmw32USub { .. }
950
+ | Operator :: I32AtomicRmw8SubU { .. }
951
+ | Operator :: I32AtomicRmw16SubU { .. }
952
+ | Operator :: I64AtomicRmw8SubU { .. }
953
+ | Operator :: I64AtomicRmw16SubU { .. }
954
+ | Operator :: I64AtomicRmw32SubU { .. }
952
955
| Operator :: I32AtomicRmwAnd { .. }
953
956
| Operator :: I64AtomicRmwAnd { .. }
954
- | Operator :: I32AtomicRmw8UAnd { .. }
955
- | Operator :: I32AtomicRmw16UAnd { .. }
956
- | Operator :: I64AtomicRmw8UAnd { .. }
957
- | Operator :: I64AtomicRmw16UAnd { .. }
958
- | Operator :: I64AtomicRmw32UAnd { .. }
957
+ | Operator :: I32AtomicRmw8AndU { .. }
958
+ | Operator :: I32AtomicRmw16AndU { .. }
959
+ | Operator :: I64AtomicRmw8AndU { .. }
960
+ | Operator :: I64AtomicRmw16AndU { .. }
961
+ | Operator :: I64AtomicRmw32AndU { .. }
959
962
| Operator :: I32AtomicRmwOr { .. }
960
963
| Operator :: I64AtomicRmwOr { .. }
961
- | Operator :: I32AtomicRmw8UOr { .. }
962
- | Operator :: I32AtomicRmw16UOr { .. }
963
- | Operator :: I64AtomicRmw8UOr { .. }
964
- | Operator :: I64AtomicRmw16UOr { .. }
965
- | Operator :: I64AtomicRmw32UOr { .. }
964
+ | Operator :: I32AtomicRmw8OrU { .. }
965
+ | Operator :: I32AtomicRmw16OrU { .. }
966
+ | Operator :: I64AtomicRmw8OrU { .. }
967
+ | Operator :: I64AtomicRmw16OrU { .. }
968
+ | Operator :: I64AtomicRmw32OrU { .. }
966
969
| Operator :: I32AtomicRmwXor { .. }
967
970
| Operator :: I64AtomicRmwXor { .. }
968
- | Operator :: I32AtomicRmw8UXor { .. }
969
- | Operator :: I32AtomicRmw16UXor { .. }
970
- | Operator :: I64AtomicRmw8UXor { .. }
971
- | Operator :: I64AtomicRmw16UXor { .. }
972
- | Operator :: I64AtomicRmw32UXor { .. }
971
+ | Operator :: I32AtomicRmw8XorU { .. }
972
+ | Operator :: I32AtomicRmw16XorU { .. }
973
+ | Operator :: I64AtomicRmw8XorU { .. }
974
+ | Operator :: I64AtomicRmw16XorU { .. }
975
+ | Operator :: I64AtomicRmw32XorU { .. }
973
976
| Operator :: I32AtomicRmwXchg { .. }
974
977
| Operator :: I64AtomicRmwXchg { .. }
975
- | Operator :: I32AtomicRmw8UXchg { .. }
976
- | Operator :: I32AtomicRmw16UXchg { .. }
977
- | Operator :: I64AtomicRmw8UXchg { .. }
978
- | Operator :: I64AtomicRmw16UXchg { .. }
979
- | Operator :: I64AtomicRmw32UXchg { .. }
978
+ | Operator :: I32AtomicRmw8XchgU { .. }
979
+ | Operator :: I32AtomicRmw16XchgU { .. }
980
+ | Operator :: I64AtomicRmw8XchgU { .. }
981
+ | Operator :: I64AtomicRmw16XchgU { .. }
982
+ | Operator :: I64AtomicRmw32XchgU { .. }
980
983
| Operator :: I32AtomicRmwCmpxchg { .. }
981
984
| Operator :: I64AtomicRmwCmpxchg { .. }
982
- | Operator :: I32AtomicRmw8UCmpxchg { .. }
983
- | Operator :: I32AtomicRmw16UCmpxchg { .. }
984
- | Operator :: I64AtomicRmw8UCmpxchg { .. }
985
- | Operator :: I64AtomicRmw16UCmpxchg { .. }
986
- | Operator :: I64AtomicRmw32UCmpxchg { .. }
987
- | Operator :: Fence { .. } => {
985
+ | Operator :: I32AtomicRmw8CmpxchgU { .. }
986
+ | Operator :: I32AtomicRmw16CmpxchgU { .. }
987
+ | Operator :: I64AtomicRmw8CmpxchgU { .. }
988
+ | Operator :: I64AtomicRmw16CmpxchgU { .. }
989
+ | Operator :: I64AtomicRmw32CmpxchgU { .. }
990
+ | Operator :: AtomicFence { .. } => {
988
991
return Err ( wasm_unsupported ! ( "proposed thread operator {:?}" , op) ) ;
989
992
}
990
993
Operator :: MemoryCopy => {
@@ -1039,7 +1042,7 @@ pub fn translate_operator<FE: FuncEnvironment + ?Sized>(
1039
1042
table,
1040
1043
) ?) ;
1041
1044
}
1042
- Operator :: TableCopy => {
1045
+ Operator :: TableCopy { .. } => {
1043
1046
// The WebAssembly MVP only supports one table and wasmparser will
1044
1047
// ensure that the table index specified is zero.
1045
1048
let dst_table_index = 0 ;
@@ -1060,7 +1063,7 @@ pub fn translate_operator<FE: FuncEnvironment + ?Sized>(
1060
1063
len,
1061
1064
) ?;
1062
1065
}
1063
- Operator :: TableInit { segment } => {
1066
+ Operator :: TableInit { segment, table : _ } => {
1064
1067
// The WebAssembly MVP only supports one table and we assume it here.
1065
1068
let table_index = 0 ;
1066
1069
let table = state. get_table ( builder. func , table_index, environ) ?;
@@ -1077,6 +1080,9 @@ pub fn translate_operator<FE: FuncEnvironment + ?Sized>(
1077
1080
len,
1078
1081
) ?;
1079
1082
}
1083
+ Operator :: TableFill { .. } => {
1084
+ return Err ( wasm_unsupported ! ( "proposed table operator {:?}" , op) ) ;
1085
+ }
1080
1086
Operator :: ElemDrop { segment } => {
1081
1087
environ. translate_elem_drop ( builder. cursor ( ) , * segment) ?;
1082
1088
}
@@ -1330,20 +1336,42 @@ pub fn translate_operator<FE: FuncEnvironment + ?Sized>(
1330
1336
| Operator :: I8x16ShrS
1331
1337
| Operator :: I8x16ShrU
1332
1338
| Operator :: I8x16Mul
1339
+ | Operator :: I64x2Mul
1333
1340
| Operator :: I64x2ShrS
1334
- | Operator :: I32x4TruncSF32x4Sat
1335
- | Operator :: I32x4TruncUF32x4Sat
1336
- | Operator :: I64x2TruncSF64x2Sat
1337
- | Operator :: I64x2TruncUF64x2Sat
1338
- | Operator :: F32x4ConvertSI32x4
1339
- | Operator :: F32x4ConvertUI32x4
1340
- | Operator :: F64x2ConvertSI64x2
1341
- | Operator :: F64x2ConvertUI64x2 { .. }
1341
+ | Operator :: I32x4TruncSatF32x4S
1342
+ | Operator :: I32x4TruncSatF32x4U
1343
+ | Operator :: I64x2TruncSatF64x2S
1344
+ | Operator :: I64x2TruncSatF64x2U
1345
+ | Operator :: F32x4ConvertI32x4S
1346
+ | Operator :: F32x4ConvertI32x4U
1347
+ | Operator :: F64x2ConvertI64x2S
1348
+ | Operator :: F64x2ConvertI64x2U { .. }
1349
+ | Operator :: I8x16NarrowI16x8S { .. }
1350
+ | Operator :: I8x16NarrowI16x8U { .. }
1351
+ | Operator :: I16x8NarrowI32x4S { .. }
1352
+ | Operator :: I16x8NarrowI32x4U { .. }
1353
+ | Operator :: I16x8WidenLowI8x16S { .. }
1354
+ | Operator :: I16x8WidenHighI8x16S { .. }
1355
+ | Operator :: I16x8WidenLowI8x16U { .. }
1356
+ | Operator :: I16x8WidenHighI8x16U { .. }
1357
+ | Operator :: I32x4WidenLowI16x8S { .. }
1358
+ | Operator :: I32x4WidenHighI16x8S { .. }
1359
+ | Operator :: I32x4WidenLowI16x8U { .. }
1360
+ | Operator :: I32x4WidenHighI16x8U { .. }
1342
1361
| Operator :: V8x16Swizzle
1343
- | Operator :: I8x16LoadSplat { .. }
1344
- | Operator :: I16x8LoadSplat { .. }
1345
- | Operator :: I32x4LoadSplat { .. }
1346
- | Operator :: I64x2LoadSplat { .. } => {
1362
+ | Operator :: V8x16LoadSplat { .. }
1363
+ | Operator :: V16x8LoadSplat { .. }
1364
+ | Operator :: V32x4LoadSplat { .. }
1365
+ | Operator :: V64x2LoadSplat { .. }
1366
+ | Operator :: I16x8Load8x8S { .. }
1367
+ | Operator :: I16x8Load8x8U { .. }
1368
+ | Operator :: I32x4Load16x4S { .. }
1369
+ | Operator :: I32x4Load16x4U { .. }
1370
+ | Operator :: I64x2Load32x2S { .. }
1371
+ | Operator :: I64x2Load32x2U { .. }
1372
+ | Operator :: I8x16RoundingAverageU { .. }
1373
+ | Operator :: I16x8RoundingAverageU { .. }
1374
+ | Operator :: V128AndNot { .. } => {
1347
1375
return Err ( wasm_unsupported ! ( "proposed SIMD operator {:?}" , op) ) ;
1348
1376
}
1349
1377
} ;
@@ -1727,8 +1755,8 @@ fn type_of(operator: &Operator) -> Type {
1727
1755
| Operator :: I32x4Add
1728
1756
| Operator :: I32x4Sub
1729
1757
| Operator :: I32x4Mul
1730
- | Operator :: F32x4ConvertSI32x4
1731
- | Operator :: F32x4ConvertUI32x4 => I32X4 ,
1758
+ | Operator :: F32x4ConvertI32x4S
1759
+ | Operator :: F32x4ConvertI32x4U => I32X4 ,
1732
1760
1733
1761
Operator :: I64x2Splat
1734
1762
| Operator :: I64x2ExtractLane { .. }
@@ -1741,8 +1769,8 @@ fn type_of(operator: &Operator) -> Type {
1741
1769
| Operator :: I64x2ShrU
1742
1770
| Operator :: I64x2Add
1743
1771
| Operator :: I64x2Sub
1744
- | Operator :: F64x2ConvertSI64x2
1745
- | Operator :: F64x2ConvertUI64x2 => I64X2 ,
1772
+ | Operator :: F64x2ConvertI64x2S
1773
+ | Operator :: F64x2ConvertI64x2U => I64X2 ,
1746
1774
1747
1775
Operator :: F32x4Splat
1748
1776
| Operator :: F32x4ExtractLane { .. }
@@ -1762,8 +1790,8 @@ fn type_of(operator: &Operator) -> Type {
1762
1790
| Operator :: F32x4Div
1763
1791
| Operator :: F32x4Min
1764
1792
| Operator :: F32x4Max
1765
- | Operator :: I32x4TruncSF32x4Sat
1766
- | Operator :: I32x4TruncUF32x4Sat => F32X4 ,
1793
+ | Operator :: I32x4TruncSatF32x4S
1794
+ | Operator :: I32x4TruncSatF32x4U => F32X4 ,
1767
1795
1768
1796
Operator :: F64x2Splat
1769
1797
| Operator :: F64x2ExtractLane { .. }
@@ -1783,8 +1811,8 @@ fn type_of(operator: &Operator) -> Type {
1783
1811
| Operator :: F64x2Div
1784
1812
| Operator :: F64x2Min
1785
1813
| Operator :: F64x2Max
1786
- | Operator :: I64x2TruncSF64x2Sat
1787
- | Operator :: I64x2TruncUF64x2Sat => F64X2 ,
1814
+ | Operator :: I64x2TruncSatF64x2S
1815
+ | Operator :: I64x2TruncSatF64x2U => F64X2 ,
1788
1816
1789
1817
_ => unimplemented ! (
1790
1818
"Currently only the SIMD instructions are translated to their return type: {:?}" ,
0 commit comments