aboutsummaryrefslogtreecommitdiff
path: root/src/value.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2022-02-07 18:52:57 -0500
committerGitHub <noreply@github.com>2022-02-07 18:52:57 -0500
commit9bbfbacae0707cf0712e4d6b227b17d097708c7e (patch)
treed61c60e53f167ecb3c5b24235f5fa30f01fd8c23 /src/value.zig
parentdd49ed1c642d917af40bf4a0e03d013f40b3903b (diff)
parenta028488384c599aa997ba04bbd5ed98f2172630c (diff)
downloadzig-9bbfbacae0707cf0712e4d6b227b17d097708c7e.tar.gz
zig-9bbfbacae0707cf0712e4d6b227b17d097708c7e.zip
Merge pull request #10801 from schmee/stage2-sqrt
stage2: implement @sqrt for f{16,32,64}
Diffstat (limited to 'src/value.zig')
-rw-r--r--src/value.zig32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/value.zig b/src/value.zig
index cc6827b0cc..23a04f2e5a 100644
--- a/src/value.zig
+++ b/src/value.zig
@@ -3265,6 +3265,38 @@ pub const Value = extern union {
}
}
+ pub fn sqrt(val: Value, float_type: Type, arena: Allocator, target: Target) Allocator.Error!Value {
+ switch (float_type.floatBits(target)) {
+ 16 => {
+ const f = val.toFloat(f16);
+ return Value.Tag.float_16.create(arena, @sqrt(f));
+ },
+ 32 => {
+ const f = val.toFloat(f32);
+ return Value.Tag.float_32.create(arena, @sqrt(f));
+ },
+ 64 => {
+ const f = val.toFloat(f64);
+ return Value.Tag.float_64.create(arena, @sqrt(f));
+ },
+ 80 => {
+ if (true) {
+ @panic("TODO implement compiler_rt __sqrtx");
+ }
+ const f = val.toFloat(f80);
+ return Value.Tag.float_80.create(arena, @sqrt(f));
+ },
+ 128 => {
+ if (true) {
+ @panic("TODO implement compiler_rt sqrtq");
+ }
+ const f = val.toFloat(f128);
+ return Value.Tag.float_128.create(arena, @sqrt(f));
+ },
+ else => unreachable,
+ }
+ }
+
/// This type is not copyable since it may contain pointers to its inner data.
pub const Payload = struct {
tag: Tag,