diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2022-02-07 18:52:57 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-02-07 18:52:57 -0500 |
| commit | 9bbfbacae0707cf0712e4d6b227b17d097708c7e (patch) | |
| tree | d61c60e53f167ecb3c5b24235f5fa30f01fd8c23 /src/value.zig | |
| parent | dd49ed1c642d917af40bf4a0e03d013f40b3903b (diff) | |
| parent | a028488384c599aa997ba04bbd5ed98f2172630c (diff) | |
| download | zig-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.zig | 32 |
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, |
