zig

fork of https://codeberg.org/ziglang/zig
Log | Tree | Refs | README | LICENSE

blob bfb94de2 (6870B) - Raw


      1 const std = @import("std");
      2 const builtin = @import("builtin");
      3 const expect = std.testing.expect;
      4 
      5 const stage2_x86_64_without_hardware_fma_support = builtin.zig_backend == .stage2_x86_64 and
      6     !std.Target.x86.featureSetHas(builtin.cpu.features, .fma);
      7 
      8 test "@mulAdd" {
      9     if (stage2_x86_64_without_hardware_fma_support) return error.SkipZigTest; // TODO
     10     if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
     11     if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
     12     if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
     13 
     14     comptime try testMulAdd();
     15     try testMulAdd();
     16 }
     17 
     18 fn testMulAdd() !void {
     19     {
     20         var a: f32 = 5.5;
     21         var b: f32 = 2.5;
     22         var c: f32 = 6.25;
     23         try expect(@mulAdd(f32, a, b, c) == 20);
     24     }
     25     {
     26         var a: f64 = 5.5;
     27         var b: f64 = 2.5;
     28         var c: f64 = 6.25;
     29         try expect(@mulAdd(f64, a, b, c) == 20);
     30     }
     31 }
     32 
     33 test "@mulAdd f16" {
     34     if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
     35     if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
     36     if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
     37     if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
     38 
     39     comptime try testMulAdd16();
     40     try testMulAdd16();
     41 }
     42 
     43 fn testMulAdd16() !void {
     44     var a: f16 = 5.5;
     45     var b: f16 = 2.5;
     46     var c: f16 = 6.25;
     47     try expect(@mulAdd(f16, a, b, c) == 20);
     48 }
     49 
     50 test "@mulAdd f80" {
     51     if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
     52     if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
     53     if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
     54     if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
     55     if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
     56 
     57     comptime try testMulAdd80();
     58     try testMulAdd80();
     59 }
     60 
     61 fn testMulAdd80() !void {
     62     var a: f16 = 5.5;
     63     var b: f80 = 2.5;
     64     var c: f80 = 6.25;
     65     try expect(@mulAdd(f80, a, b, c) == 20);
     66 }
     67 
     68 test "@mulAdd f128" {
     69     if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
     70     if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
     71     if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
     72     if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
     73     if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
     74 
     75     comptime try testMulAdd128();
     76     try testMulAdd128();
     77 }
     78 
     79 fn testMulAdd128() !void {
     80     var a: f16 = 5.5;
     81     var b: f128 = 2.5;
     82     var c: f128 = 6.25;
     83     try expect(@mulAdd(f128, a, b, c) == 20);
     84 }
     85 
     86 fn vector16() !void {
     87     var a = @Vector(4, f16){ 5.5, 5.5, 5.5, 5.5 };
     88     var b = @Vector(4, f16){ 2.5, 2.5, 2.5, 2.5 };
     89     var c = @Vector(4, f16){ 6.25, 6.25, 6.25, 6.25 };
     90     var x = @mulAdd(@Vector(4, f16), a, b, c);
     91 
     92     try expect(x[0] == 20);
     93     try expect(x[1] == 20);
     94     try expect(x[2] == 20);
     95     try expect(x[3] == 20);
     96 }
     97 
     98 test "vector f16" {
     99     if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
    100     if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
    101     if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
    102     if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
    103     if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
    104 
    105     comptime try vector16();
    106     try vector16();
    107 }
    108 
    109 fn vector32() !void {
    110     var a = @Vector(4, f32){ 5.5, 5.5, 5.5, 5.5 };
    111     var b = @Vector(4, f32){ 2.5, 2.5, 2.5, 2.5 };
    112     var c = @Vector(4, f32){ 6.25, 6.25, 6.25, 6.25 };
    113     var x = @mulAdd(@Vector(4, f32), a, b, c);
    114 
    115     try expect(x[0] == 20);
    116     try expect(x[1] == 20);
    117     try expect(x[2] == 20);
    118     try expect(x[3] == 20);
    119 }
    120 
    121 test "vector f32" {
    122     if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
    123     if (stage2_x86_64_without_hardware_fma_support) return error.SkipZigTest; // TODO
    124     if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
    125     if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
    126     if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
    127 
    128     comptime try vector32();
    129     try vector32();
    130 }
    131 
    132 fn vector64() !void {
    133     var a = @Vector(4, f64){ 5.5, 5.5, 5.5, 5.5 };
    134     var b = @Vector(4, f64){ 2.5, 2.5, 2.5, 2.5 };
    135     var c = @Vector(4, f64){ 6.25, 6.25, 6.25, 6.25 };
    136     var x = @mulAdd(@Vector(4, f64), a, b, c);
    137 
    138     try expect(x[0] == 20);
    139     try expect(x[1] == 20);
    140     try expect(x[2] == 20);
    141     try expect(x[3] == 20);
    142 }
    143 
    144 test "vector f64" {
    145     if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
    146     if (stage2_x86_64_without_hardware_fma_support) return error.SkipZigTest; // TODO
    147     if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
    148     if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
    149     if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
    150 
    151     comptime try vector64();
    152     try vector64();
    153 }
    154 
    155 fn vector80() !void {
    156     var a = @Vector(4, f80){ 5.5, 5.5, 5.5, 5.5 };
    157     var b = @Vector(4, f80){ 2.5, 2.5, 2.5, 2.5 };
    158     var c = @Vector(4, f80){ 6.25, 6.25, 6.25, 6.25 };
    159     var x = @mulAdd(@Vector(4, f80), a, b, c);
    160     try expect(x[0] == 20);
    161     try expect(x[1] == 20);
    162     try expect(x[2] == 20);
    163     try expect(x[3] == 20);
    164 }
    165 
    166 test "vector f80" {
    167     if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
    168     if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
    169     if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
    170     if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
    171     if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
    172 
    173     comptime try vector80();
    174     try vector80();
    175 }
    176 
    177 fn vector128() !void {
    178     var a = @Vector(4, f128){ 5.5, 5.5, 5.5, 5.5 };
    179     var b = @Vector(4, f128){ 2.5, 2.5, 2.5, 2.5 };
    180     var c = @Vector(4, f128){ 6.25, 6.25, 6.25, 6.25 };
    181     var x = @mulAdd(@Vector(4, f128), a, b, c);
    182 
    183     try expect(x[0] == 20);
    184     try expect(x[1] == 20);
    185     try expect(x[2] == 20);
    186     try expect(x[3] == 20);
    187 }
    188 
    189 test "vector f128" {
    190     if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
    191     if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
    192     if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
    193     if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
    194     if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
    195 
    196     comptime try vector128();
    197     try vector128();
    198 }