File tree Expand file tree Collapse file tree 5 files changed +50
-7
lines changed Expand file tree Collapse file tree 5 files changed +50
-7
lines changed Original file line number Diff line number Diff line change 2884
2884
(rule 2 (x64_imul_imm $I16 src1 (i8_try_from_i32 src2)) (x64_imulw_rmi_sxb src1 src2))
2885
2885
(rule 2 (x64_imul_imm $I32 src1 (i8_try_from_i32 src2)) (x64_imull_rmi_sxb src1 src2))
2886
2886
(rule 2 (x64_imul_imm $I64 src1 (i8_try_from_i32 src2)) (x64_imulq_rmi_sxb src1 src2))
2887
- (rule 1 (x64_imul_imm $I16 src1 (u16_try_from_i32 src2)) (x64_imulw_rmi src1 src2))
2888
- (rule 1 (x64_imul_imm $I32 src1 (i32_as_u32 src2)) (x64_imull_rmi src1 src2))
2889
- (rule 1 (x64_imul_imm $I64 src1 src2) (x64_imulq_rmi_sxl src1 src2))
2887
+ (rule 1 (x64_imul_imm $I16 src1 (i16_try_from_i32 src2)) (x64_imulw_rmi src1 (i16_as_u16 src2) ))
2888
+ (rule 1 (x64_imul_imm $I32 src1 src2) (x64_imull_rmi src1 (i32_as_u32 src2) ))
2889
+ (rule 1 (x64_imul_imm $I64 src1 src2) (x64_imulq_rmi_sxl src1 src2))
2890
2890
2891
2891
;; Helper for creating `mul` instructions or `imul` instructions (depending
2892
2892
;; on `signed`) for 8-bit operands.
Original file line number Diff line number Diff line change @@ -59,8 +59,8 @@ macro_rules! isle_common_prelude_methods {
59
59
}
60
60
61
61
#[ inline]
62
- fn i32_as_u32( & mut self , x: i32 ) -> Option < u32 > {
63
- Some ( x as u32 )
62
+ fn i32_as_u32( & mut self , x: i32 ) -> u32 {
63
+ x as u32
64
64
}
65
65
66
66
#[ inline]
@@ -958,6 +958,14 @@ macro_rules! isle_common_prelude_methods {
958
958
i8 :: try_from( val) . ok( )
959
959
}
960
960
961
+ fn i16_as_u16( & mut self , val: i16 ) -> u16 {
962
+ val as u16
963
+ }
964
+
965
+ fn i16_try_from_i32( & mut self , val: i32 ) -> Option <i16 > {
966
+ i16 :: try_from( val) . ok( )
967
+ }
968
+
961
969
fn i16_try_from_u64( & mut self , val: u64 ) -> Option <i16 > {
962
970
i16 :: try_from( val) . ok( )
963
971
}
Original file line number Diff line number Diff line change 142
142
(decl pure partial i8_try_from_u64 (u64) i8)
143
143
(extern constructor i8_try_from_u64 i8_try_from_u64)
144
144
145
+ (decl pure i16_as_u16 (i16) u16)
146
+ (extern constructor i16_as_u16 i16_as_u16)
147
+
145
148
(decl pure partial i16_try_from_u64 (u64) i16)
146
149
(extern constructor i16_try_from_u64 i16_try_from_u64)
147
150
151
+ (decl pure partial i16_try_from_i32 (i16) i32)
152
+ (extern extractor i16_try_from_i32 i16_try_from_i32)
153
+
148
154
(decl pure partial i32_try_from_u64 (u64) i32)
149
155
(extern constructor i32_try_from_u64 i32_try_from_u64)
150
156
151
157
(decl pure u32_as_u64 (u32) u64)
152
158
(extern constructor u32_as_u64 u32_as_u64)
153
159
(convert u32 u64 u32_as_u64)
154
160
155
- (decl i32_as_u32 (u32) i32 )
156
- (extern extractor i32_as_u32 i32_as_u32)
161
+ (decl i32_as_u32 (i32) u32 )
162
+ (extern constructor i32_as_u32 i32_as_u32)
157
163
158
164
(decl pure i32_as_i64 (i32) i64)
159
165
(extern constructor i32_as_i64 i32_as_i64)
Original file line number Diff line number Diff line change
1
+ ;; ! target = 'x86_64'
2
+ ;; ! test = 'compile'
3
+
4
+ (module
5
+ (func (export " mul16" ) (param i32 ) (result i32 )
6
+ local.get 0
7
+ i32.const -7937
8
+ i32.mul
9
+ i32.extend16_s
10
+ )
11
+ )
12
+ ;; wasm[0]::function[0]:
13
+ ;; pushq %rbp
14
+ ;; movq %rsp, %rbp
15
+ ;; imulw $0xe0ff, %dx, %dx
16
+ ;; movswl %dx, %eax
17
+ ;; movq %rbp, %rsp
18
+ ;; popq %rbp
19
+ ;; retq
Original file line number Diff line number Diff line change
1
+ (module
2
+ (func (export " mul16" ) (param i32 ) (result i32 )
3
+ local.get 0
4
+ i32.const -7937
5
+ i32.mul
6
+ i32.extend16_s
7
+ )
8
+ )
9
+
10
+ (assert_return (invoke " mul16" (i32.const 100 )) (i32.const -7268 ))
You can’t perform that action at this time.
0 commit comments