authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-04-10 22:33:33-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-04-10 22:33:33-04:00
loga4c7e4c4eb7b1000252fab3f98f6204edb48a4bd
treee6d01d11d13677dcff5ef540c648237546154e93
parent13798d26c769323ab2a7798c27a8c62af32fd60c

__muloti4 does not need the ABI workaround on Windows

Fixes 128-bit integer multiplication on Windows. closes #2250

3 files changed, 8 insertions(+), 7 deletions(-)

std/special/compiler_rt.zig+1-2
...@@ -165,7 +165,6 @@ comptime {...@@ -165,7 +165,6 @@ comptime {
165 @export("__divti3", @import("compiler_rt/divti3.zig").__divti3_windows_x86_64, linkage);165 @export("__divti3", @import("compiler_rt/divti3.zig").__divti3_windows_x86_64, linkage);
166 @export("__modti3", @import("compiler_rt/modti3.zig").__modti3_windows_x86_64, linkage);166 @export("__modti3", @import("compiler_rt/modti3.zig").__modti3_windows_x86_64, linkage);
167 @export("__multi3", @import("compiler_rt/multi3.zig").__multi3_windows_x86_64, linkage);167 @export("__multi3", @import("compiler_rt/multi3.zig").__multi3_windows_x86_64, linkage);
168 @export("__muloti4", @import("compiler_rt/muloti4.zig").__muloti4_windows_x86_64, linkage);
169 @export("__udivti3", @import("compiler_rt/udivti3.zig").__udivti3_windows_x86_64, linkage);168 @export("__udivti3", @import("compiler_rt/udivti3.zig").__udivti3_windows_x86_64, linkage);
170 @export("__udivmodti4", @import("compiler_rt/udivmodti4.zig").__udivmodti4_windows_x86_64, linkage);169 @export("__udivmodti4", @import("compiler_rt/udivmodti4.zig").__udivmodti4_windows_x86_64, linkage);
171 @export("__umodti3", @import("compiler_rt/umodti3.zig").__umodti3_windows_x86_64, linkage);170 @export("__umodti3", @import("compiler_rt/umodti3.zig").__umodti3_windows_x86_64, linkage);
...@@ -176,11 +175,11 @@ comptime {...@@ -176,11 +175,11 @@ comptime {
176 @export("__divti3", @import("compiler_rt/divti3.zig").__divti3, linkage);175 @export("__divti3", @import("compiler_rt/divti3.zig").__divti3, linkage);
177 @export("__modti3", @import("compiler_rt/modti3.zig").__modti3, linkage);176 @export("__modti3", @import("compiler_rt/modti3.zig").__modti3, linkage);
178 @export("__multi3", @import("compiler_rt/multi3.zig").__multi3, linkage);177 @export("__multi3", @import("compiler_rt/multi3.zig").__multi3, linkage);
179 @export("__muloti4", @import("compiler_rt/muloti4.zig").__muloti4, linkage);
180 @export("__udivti3", @import("compiler_rt/udivti3.zig").__udivti3, linkage);178 @export("__udivti3", @import("compiler_rt/udivti3.zig").__udivti3, linkage);
181 @export("__udivmodti4", @import("compiler_rt/udivmodti4.zig").__udivmodti4, linkage);179 @export("__udivmodti4", @import("compiler_rt/udivmodti4.zig").__udivmodti4, linkage);
182 @export("__umodti3", @import("compiler_rt/umodti3.zig").__umodti3, linkage);180 @export("__umodti3", @import("compiler_rt/umodti3.zig").__umodti3, linkage);
183 }181 }
182 @export("__muloti4", @import("compiler_rt/muloti4.zig").__muloti4, linkage);
184}183}
185184
186const std = @import("std");185const std = @import("std");
std/special/compiler_rt/muloti4.zig-5
...@@ -44,11 +44,6 @@ pub extern fn __muloti4(a: i128, b: i128, overflow: *c_int) i128 {...@@ -44,11 +44,6 @@ pub extern fn __muloti4(a: i128, b: i128, overflow: *c_int) i128 {
44 return r;44 return r;
45}45}
4646
47const v128 = @Vector(2, u64);
48pub extern fn __muloti4_windows_x86_64(a: v128, b: v128, overflow: *c_int) v128 {
49 return @bitCast(v128, @inlineCall(__muloti4, @bitCast(i128, a), @bitCast(i128, b), overflow));
50}
51
52test "import muloti4" {47test "import muloti4" {
53 _ = @import("muloti4_test.zig");48 _ = @import("muloti4_test.zig");
54}49}
test/stage1/behavior/math.zig+7
...@@ -632,3 +632,10 @@ fn testNanEqNan(comptime F: type) void {...@@ -632,3 +632,10 @@ fn testNanEqNan(comptime F: type) void {
632 expect(!(nan1 < nan2));632 expect(!(nan1 < nan2));
633 expect(!(nan1 <= nan2));633 expect(!(nan1 <= nan2));
634}634}
635
636test "128-bit multiplication" {
637 var a: i128 = 3;
638 var b: i128 = 2;
639 var c = a * b;
640 expect(c == 6);
641}