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 }