@@ -457,7 +457,6 @@ gain :: proc "contextless" (t, g: $T) -> T where intrinsics.type_is_float(T) {
457457 return bias (t*2 - 1 , 1 - g) * 0.5 + 0.5
458458}
459459
460-
461460@(require_results) sign_f16 :: proc " contextless" (x: f16 ) -> f16 { return f16 (int (0 < x) - int (x < 0 )) }
462461@(require_results) sign_f16le :: proc " contextless" (x: f16le ) -> f16le { return f16le (int (0 < x) - int (x < 0 )) }
463462@(require_results) sign_f16be :: proc " contextless" (x: f16be ) -> f16be { return f16be (int (0 < x) - int (x < 0 )) }
@@ -467,10 +466,24 @@ gain :: proc "contextless" (t, g: $T) -> T where intrinsics.type_is_float(T) {
467466@(require_results) sign_f64 :: proc " contextless" (x: f64 ) -> f64 { return f64 (int (0 < x) - int (x < 0 )) }
468467@(require_results) sign_f64le :: proc " contextless" (x: f64le ) -> f64le { return f64le (int (0 < x) - int (x < 0 )) }
469468@(require_results) sign_f64be :: proc " contextless" (x: f64be ) -> f64be { return f64be (int (0 < x) - int (x < 0 )) }
469+ @(require_results) sign_int :: proc " contextless" (x: int ) -> int { return int (0 < x) - int (x < 0 ) }
470+ @(require_results) sign_i16 :: proc " contextless" (x: i16 ) -> i16 { return i16 (int (0 < x) - int (x < 0 )) }
471+ @(require_results) sign_i16le :: proc " contextless" (x: i16le ) -> i16le { return i16le (int (0 < x) - int (x < 0 )) }
472+ @(require_results) sign_i16be :: proc " contextless" (x: i16be ) -> i16be { return i16be (int (0 < x) - int (x < 0 )) }
473+ @(require_results) sign_i32 :: proc " contextless" (x: i32 ) -> i32 { return i32 (int (0 < x) - int (x < 0 )) }
474+ @(require_results) sign_i32le :: proc " contextless" (x: i32le ) -> i32le { return i32le (int (0 < x) - int (x < 0 )) }
475+ @(require_results) sign_i32be :: proc " contextless" (x: i32be ) -> i32be { return i32be (int (0 < x) - int (x < 0 )) }
476+ @(require_results) sign_i64 :: proc " contextless" (x: i64 ) -> i64 { return i64 (int (0 < x) - int (x < 0 )) }
477+ @(require_results) sign_i64le :: proc " contextless" (x: i64le ) -> i64le { return i64le (int (0 < x) - int (x < 0 )) }
478+ @(require_results) sign_i64be :: proc " contextless" (x: i64be ) -> i64be { return i64be (int (0 < x) - int (x < 0 )) }
470479sign :: proc {
471480 sign_f16, sign_f16le, sign_f16be,
472481 sign_f32, sign_f32le, sign_f32be,
473482 sign_f64, sign_f64le, sign_f64be,
483+ sign_int,
484+ sign_i16, sign_i16le, sign_i16be,
485+ sign_i32, sign_i32le, sign_i32be,
486+ sign_i64, sign_i64le, sign_i64be,
474487}
475488
476489@(require_results) sign_bit_f16 :: proc " contextless" (x: f16 ) -> bool { return (transmute (u16 )x) & (1 <<15 ) != 0 }
@@ -482,10 +495,24 @@ sign :: proc{
482495@(require_results) sign_bit_f64 :: proc " contextless" (x: f64 ) -> bool { return (transmute (u64 )x) & (1 <<63 ) != 0 }
483496@(require_results) sign_bit_f64le :: proc " contextless" (x: f64le ) -> bool { return #force_inline sign_bit_f64 (f64 (x)) }
484497@(require_results) sign_bit_f64be :: proc " contextless" (x: f64be ) -> bool { return #force_inline sign_bit_f64 (f64 (x)) }
498+ @(require_results) sign_bit_int :: proc " contextless" (x: int ) -> bool { return uint (x) & (1 <<(size_of (int )*8 - 1 )) != 0 }
499+ @(require_results) sign_bit_i16 :: proc " contextless" (x: i16 ) -> bool { return u16 (x) & (1 <<15 ) != 0 }
500+ @(require_results) sign_bit_i16le :: proc " contextless" (x: i16le ) -> bool { return #force_inline sign_bit_i16 (i16 (x)) }
501+ @(require_results) sign_bit_i16be :: proc " contextless" (x: i16be ) -> bool { return #force_inline sign_bit_i16 (i16 (x)) }
502+ @(require_results) sign_bit_i32 :: proc " contextless" (x: i32 ) -> bool { return u32 (x) & (1 <<31 ) != 0 }
503+ @(require_results) sign_bit_i32le :: proc " contextless" (x: i32le ) -> bool { return #force_inline sign_bit_i32 (i32 (x)) }
504+ @(require_results) sign_bit_i32be :: proc " contextless" (x: i32be ) -> bool { return #force_inline sign_bit_i32 (i32 (x)) }
505+ @(require_results) sign_bit_i64 :: proc " contextless" (x: i64 ) -> bool { return u64 (x) & (1 <<63 ) != 0 }
506+ @(require_results) sign_bit_i64le :: proc " contextless" (x: i64le ) -> bool { return #force_inline sign_bit_i64 (i64 (x)) }
507+ @(require_results) sign_bit_i64be :: proc " contextless" (x: i64be ) -> bool { return #force_inline sign_bit_i64 (i64 (x)) }
485508sign_bit :: proc {
486509 sign_bit_f16, sign_bit_f16le, sign_bit_f16be,
487510 sign_bit_f32, sign_bit_f32le, sign_bit_f32be,
488511 sign_bit_f64, sign_bit_f64le, sign_bit_f64be,
512+ sign_bit_int,
513+ sign_bit_i16, sign_bit_i16le, sign_bit_i16be,
514+ sign_bit_i32, sign_bit_i32le, sign_bit_i32be,
515+ sign_bit_i64, sign_bit_i64le, sign_bit_i64be,
489516}
490517
491518@(require_results)
0 commit comments