master
 1//! neg - negate (the number)
 2//! - negXi2 for unoptimized little and big endian
 3//! sfffffff = 2^31-1
 4//! two's complement inverting bits and add 1 would result in -INT_MIN == 0
 5//! => -INT_MIN = -2^31 forbidden
 6//! * size optimized builds
 7//! * machines that dont support carry operations
 8
 9const std = @import("std");
10const builtin = @import("builtin");
11const common = @import("common.zig");
12
13pub const panic = common.panic;
14
15comptime {
16    @export(&__negsi2, .{ .name = "__negsi2", .linkage = common.linkage, .visibility = common.visibility });
17    @export(&__negdi2, .{ .name = "__negdi2", .linkage = common.linkage, .visibility = common.visibility });
18    @export(&__negti2, .{ .name = "__negti2", .linkage = common.linkage, .visibility = common.visibility });
19}
20
21pub fn __negsi2(a: i32) callconv(.c) i32 {
22    return negXi2(i32, a);
23}
24
25pub fn __negdi2(a: i64) callconv(.c) i64 {
26    return negXi2(i64, a);
27}
28
29pub fn __negti2(a: i128) callconv(.c) i128 {
30    return negXi2(i128, a);
31}
32
33inline fn negXi2(comptime T: type, a: T) T {
34    return -a;
35}
36
37test {
38    _ = @import("negsi2_test.zig");
39    _ = @import("negdi2_test.zig");
40    _ = @import("negti2_test.zig");
41}