authorgravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2023-09-11 07:59:30+02:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2023-09-11 07:59:30+02:00
log975cb235cce2f713c39c0c0f7040c8ea0eb536a5
tree152166f023e13ee3ac3a90bfb0efe5fbcff175ea
parentacc9471915d74fc2cb475ea3220a249d81e3036e
parentab970094abe674b3cb33fc98db47c0cdef5f247d
signaturebadge-question-mark Signed by PGP key 4AEE18F83AFDEB23

Merge pull request #17081 from Techatrix/wasm-float-op

wasm: implement more float operations on f80 and f128

8 files changed, 152 insertions(+), 82 deletions(-)

src/arch/wasm/CodeGen.zig+152-45
...@@ -992,13 +992,12 @@ fn addExtraAssumeCapacity(func: *CodeGen, extra: anytype) error{OutOfMemory}!u32...@@ -992,13 +992,12 @@ fn addExtraAssumeCapacity(func: *CodeGen, extra: anytype) error{OutOfMemory}!u32
992fn typeToValtype(ty: Type, mod: *Module) wasm.Valtype {992fn typeToValtype(ty: Type, mod: *Module) wasm.Valtype {
993 const target = mod.getTarget();993 const target = mod.getTarget();
994 return switch (ty.zigTypeTag(mod)) {994 return switch (ty.zigTypeTag(mod)) {
995 .Float => blk: {995 .Float => switch (ty.floatBits(target)) {
996 const bits = ty.floatBits(target);996 16 => wasm.Valtype.i32, // stored/loaded as u16
997 if (bits == 16) return wasm.Valtype.i32; // stored/loaded as u16997 32 => wasm.Valtype.f32,
998 if (bits == 32) break :blk wasm.Valtype.f32;998 64 => wasm.Valtype.f64,
999 if (bits == 64) break :blk wasm.Valtype.f64;999 80, 128 => wasm.Valtype.i64,
1000 if (bits == 128) break :blk wasm.Valtype.i64;1000 else => unreachable,
1001 return wasm.Valtype.i32; // represented as pointer to stack
1002 },1001 },
1003 .Int, .Enum => blk: {1002 .Int, .Enum => blk: {
1004 const info = ty.intInfo(mod);1003 const info = ty.intInfo(mod);
...@@ -2559,7 +2558,7 @@ fn airArg(func: *CodeGen, inst: Air.Inst.Index) InnerError!void {...@@ -2559,7 +2558,7 @@ fn airArg(func: *CodeGen, inst: Air.Inst.Index) InnerError!void {
2559 const result = try func.allocStack(arg_ty);2558 const result = try func.allocStack(arg_ty);
2560 try func.store(result, arg, Type.u64, 0);2559 try func.store(result, arg, Type.u64, 0);
2561 try func.store(result, func.args[arg_index + 1], Type.u64, 8);2560 try func.store(result, func.args[arg_index + 1], Type.u64, 8);
2562 return func.finishAir(inst, arg, &.{});2561 return func.finishAir(inst, result, &.{});
2563 }2562 }
2564 } else {2563 } else {
2565 func.arg_index += 1;2564 func.arg_index += 1;
...@@ -2651,12 +2650,18 @@ fn binOp(func: *CodeGen, lhs: WValue, rhs: WValue, ty: Type, op: Op) InnerError!...@@ -2651,12 +2650,18 @@ fn binOp(func: *CodeGen, lhs: WValue, rhs: WValue, ty: Type, op: Op) InnerError!
26512650
2652fn binOpBigInt(func: *CodeGen, lhs: WValue, rhs: WValue, ty: Type, op: Op) InnerError!WValue {2651fn binOpBigInt(func: *CodeGen, lhs: WValue, rhs: WValue, ty: Type, op: Op) InnerError!WValue {
2653 const mod = func.bin_file.base.options.module.?;2652 const mod = func.bin_file.base.options.module.?;
2654 if (ty.intInfo(mod).bits > 128) {2653 const int_info = ty.intInfo(mod);
2654 if (int_info.bits > 128) {
2655 return func.fail("TODO: Implement binary operation for big integers larger than 128 bits", .{});2655 return func.fail("TODO: Implement binary operation for big integers larger than 128 bits", .{});
2656 }2656 }
26572657
2658 switch (op) {2658 switch (op) {
2659 .mul => return func.callIntrinsic("__multi3", &.{ ty.toIntern(), ty.toIntern() }, ty, &.{ lhs, rhs }),2659 .mul => return func.callIntrinsic("__multi3", &.{ ty.toIntern(), ty.toIntern() }, ty, &.{ lhs, rhs }),
2660 .div => switch (int_info.signedness) {
2661 .signed => return func.callIntrinsic("__udivti3", &.{ ty.toIntern(), ty.toIntern() }, ty, &.{ lhs, rhs }),
2662 .unsigned => return func.callIntrinsic("__divti3", &.{ ty.toIntern(), ty.toIntern() }, ty, &.{ lhs, rhs }),
2663 },
2664 .rem => return func.callIntrinsic("__umodti3", &.{ ty.toIntern(), ty.toIntern() }, ty, &.{ lhs, rhs }),
2660 .shr => return func.callIntrinsic("__lshrti3", &.{ ty.toIntern(), .i32_type }, ty, &.{ lhs, rhs }),2665 .shr => return func.callIntrinsic("__lshrti3", &.{ ty.toIntern(), .i32_type }, ty, &.{ lhs, rhs }),
2661 .shl => return func.callIntrinsic("__ashlti3", &.{ ty.toIntern(), .i32_type }, ty, &.{ lhs, rhs }),2666 .shl => return func.callIntrinsic("__ashlti3", &.{ ty.toIntern(), .i32_type }, ty, &.{ lhs, rhs }),
2662 .xor => {2667 .xor => {
...@@ -2795,6 +2800,11 @@ fn floatOp(func: *CodeGen, float_op: FloatOp, ty: Type, args: []const WValue) In...@@ -2795,6 +2800,11 @@ fn floatOp(func: *CodeGen, float_op: FloatOp, ty: Type, args: []const WValue) In
2795 }2800 }
27962801
2797 const float_bits = ty.floatBits(func.target);2802 const float_bits = ty.floatBits(func.target);
2803
2804 if (float_op == .neg) {
2805 return func.floatNeg(ty, args[0]);
2806 }
2807
2798 if (float_bits == 32 or float_bits == 64) {2808 if (float_bits == 32 or float_bits == 64) {
2799 if (float_op.toOp()) |op| {2809 if (float_op.toOp()) |op| {
2800 for (args) |operand| {2810 for (args) |operand| {
...@@ -2804,13 +2814,6 @@ fn floatOp(func: *CodeGen, float_op: FloatOp, ty: Type, args: []const WValue) In...@@ -2804,13 +2814,6 @@ fn floatOp(func: *CodeGen, float_op: FloatOp, ty: Type, args: []const WValue) In
2804 try func.addTag(Mir.Inst.Tag.fromOpcode(opcode));2814 try func.addTag(Mir.Inst.Tag.fromOpcode(opcode));
2805 return .stack;2815 return .stack;
2806 }2816 }
2807 } else if (float_bits == 16 and float_op == .neg) {
2808 try func.emitWValue(args[0]);
2809 try func.addImm32(std.math.minInt(i16));
2810 try func.addTag(Mir.Inst.Tag.fromOpcode(.i32_xor));
2811 return .stack;
2812 } else if (float_bits == 128 and float_op == .neg) {
2813 return func.fail("TODO: Implement neg for f128", .{});
2814 }2817 }
28152818
2816 var fn_name_buf: [64]u8 = undefined;2819 var fn_name_buf: [64]u8 = undefined;
...@@ -2853,6 +2856,49 @@ fn floatOp(func: *CodeGen, float_op: FloatOp, ty: Type, args: []const WValue) In...@@ -2853,6 +2856,49 @@ fn floatOp(func: *CodeGen, float_op: FloatOp, ty: Type, args: []const WValue) In
2853 return func.callIntrinsic(fn_name, param_types, ty, args);2856 return func.callIntrinsic(fn_name, param_types, ty, args);
2854}2857}
28552858
2859/// NOTE: The result value remains on top of the stack.
2860fn floatNeg(func: *CodeGen, ty: Type, arg: WValue) InnerError!WValue {
2861 const float_bits = ty.floatBits(func.target);
2862 switch (float_bits) {
2863 16 => {
2864 try func.emitWValue(arg);
2865 try func.addImm32(std.math.minInt(i16));
2866 try func.addTag(.i32_xor);
2867 return .stack;
2868 },
2869 32, 64 => {
2870 try func.emitWValue(arg);
2871 const val_type: wasm.Valtype = if (float_bits == 32) .f32 else .f64;
2872 const opcode = buildOpcode(.{ .op = .neg, .valtype1 = val_type });
2873 try func.addTag(Mir.Inst.Tag.fromOpcode(opcode));
2874 return .stack;
2875 },
2876 80, 128 => {
2877 const result = try func.allocStack(ty);
2878 try func.emitWValue(result);
2879 try func.emitWValue(arg);
2880 try func.addMemArg(.i64_load, .{ .offset = 0 + arg.offset(), .alignment = 2 });
2881 try func.addMemArg(.i64_store, .{ .offset = 0 + result.offset(), .alignment = 2 });
2882
2883 try func.emitWValue(result);
2884 try func.emitWValue(arg);
2885 try func.addMemArg(.i64_load, .{ .offset = 8 + arg.offset(), .alignment = 2 });
2886
2887 if (float_bits == 80) {
2888 try func.addImm64(0x8000);
2889 try func.addTag(.i64_xor);
2890 try func.addMemArg(.i64_store16, .{ .offset = 8 + result.offset(), .alignment = 2 });
2891 } else {
2892 try func.addImm64(0x8000000000000000);
2893 try func.addTag(.i64_xor);
2894 try func.addMemArg(.i64_store, .{ .offset = 8 + result.offset(), .alignment = 2 });
2895 }
2896 return result;
2897 },
2898 else => unreachable,
2899 }
2900}
2901
2856fn airWrapBinOp(func: *CodeGen, inst: Air.Inst.Index, op: Op) InnerError!void {2902fn airWrapBinOp(func: *CodeGen, inst: Air.Inst.Index, op: Op) InnerError!void {
2857 const mod = func.bin_file.base.options.module.?;2903 const mod = func.bin_file.base.options.module.?;
2858 const bin_op = func.air.instructions.items(.data)[inst].bin_op;2904 const bin_op = func.air.instructions.items(.data)[inst].bin_op;
...@@ -3430,10 +3476,10 @@ fn cmp(func: *CodeGen, lhs: WValue, rhs: WValue, ty: Type, op: std.math.CompareO...@@ -3430,10 +3476,10 @@ fn cmp(func: *CodeGen, lhs: WValue, rhs: WValue, ty: Type, op: std.math.CompareO
3430 // both lhs and rhs, as well as checking the payload are matching of lhs and rhs3476 // both lhs and rhs, as well as checking the payload are matching of lhs and rhs
3431 return func.cmpOptionals(lhs, rhs, ty, op);3477 return func.cmpOptionals(lhs, rhs, ty, op);
3432 }3478 }
3479 } else if (ty.isAnyFloat()) {
3480 return func.cmpFloat(ty, lhs, rhs, op);
3433 } else if (isByRef(ty, mod)) {3481 } else if (isByRef(ty, mod)) {
3434 return func.cmpBigInt(lhs, rhs, ty, op);3482 return func.cmpBigInt(lhs, rhs, ty, op);
3435 } else if (ty.isAnyFloat() and ty.floatBits(func.target) == 16) {
3436 return func.cmpFloat16(lhs, rhs, op);
3437 }3483 }
34383484
3439 // ensure that when we compare pointers, we emit3485 // ensure that when we compare pointers, we emit
...@@ -3465,26 +3511,47 @@ fn cmp(func: *CodeGen, lhs: WValue, rhs: WValue, ty: Type, op: std.math.CompareO...@@ -3465,26 +3511,47 @@ fn cmp(func: *CodeGen, lhs: WValue, rhs: WValue, ty: Type, op: std.math.CompareO
3465 return WValue{ .stack = {} };3511 return WValue{ .stack = {} };
3466}3512}
34673513
3468/// Compares 16-bit floats3514/// Compares two floats.
3469/// NOTE: The result value remains on top of the stack.3515/// NOTE: Leaves the result of the comparison on top of the stack.
3470fn cmpFloat16(func: *CodeGen, lhs: WValue, rhs: WValue, op: std.math.CompareOperator) InnerError!WValue {3516fn cmpFloat(func: *CodeGen, ty: Type, lhs: WValue, rhs: WValue, cmp_op: std.math.CompareOperator) InnerError!WValue {
3471 const opcode: wasm.Opcode = buildOpcode(.{3517 const float_bits = ty.floatBits(func.target);
3472 .op = switch (op) {
3473 .lt => .lt,
3474 .lte => .le,
3475 .eq => .eq,
3476 .neq => .ne,
3477 .gte => .ge,
3478 .gt => .gt,
3479 },
3480 .valtype1 = .f32,
3481 .signedness = .unsigned,
3482 });
3483 _ = try func.fpext(lhs, Type.f16, Type.f32);
3484 _ = try func.fpext(rhs, Type.f16, Type.f32);
3485 try func.addTag(Mir.Inst.Tag.fromOpcode(opcode));
34863518
3487 return WValue{ .stack = {} };3519 const op: Op = switch (cmp_op) {
3520 .lt => .lt,
3521 .lte => .le,
3522 .eq => .eq,
3523 .neq => .ne,
3524 .gte => .ge,
3525 .gt => .gt,
3526 };
3527
3528 switch (float_bits) {
3529 16 => {
3530 _ = try func.fpext(lhs, Type.f16, Type.f32);
3531 _ = try func.fpext(rhs, Type.f16, Type.f32);
3532 const opcode = buildOpcode(.{ .op = op, .valtype1 = .f32 });
3533 try func.addTag(Mir.Inst.Tag.fromOpcode(opcode));
3534 return .stack;
3535 },
3536 32, 64 => {
3537 try func.emitWValue(lhs);
3538 try func.emitWValue(rhs);
3539 const val_type: wasm.Valtype = if (float_bits == 32) .f32 else .f64;
3540 const opcode = buildOpcode(.{ .op = op, .valtype1 = val_type });
3541 try func.addTag(Mir.Inst.Tag.fromOpcode(opcode));
3542 return .stack;
3543 },
3544 80, 128 => {
3545 var fn_name_buf: [32]u8 = undefined;
3546 const fn_name = std.fmt.bufPrint(&fn_name_buf, "__{s}{s}f2", .{
3547 @tagName(op), target_util.compilerRtFloatAbbrev(float_bits),
3548 }) catch unreachable;
3549
3550 const result = try func.callIntrinsic(fn_name, &.{ ty.ip_index, ty.ip_index }, Type.bool, &.{ lhs, rhs });
3551 return func.cmp(result, WValue{ .imm32 = 0 }, Type.i32, cmp_op);
3552 },
3553 else => unreachable,
3554 }
3488}3555}
34893556
3490fn airCmpVector(func: *CodeGen, inst: Air.Inst.Index) InnerError!void {3557fn airCmpVector(func: *CodeGen, inst: Air.Inst.Index) InnerError!void {
...@@ -4796,11 +4863,31 @@ fn airIntFromFloat(func: *CodeGen, inst: Air.Inst.Index) InnerError!void {...@@ -4796,11 +4863,31 @@ fn airIntFromFloat(func: *CodeGen, inst: Air.Inst.Index) InnerError!void {
4796 const ty_op = func.air.instructions.items(.data)[inst].ty_op;4863 const ty_op = func.air.instructions.items(.data)[inst].ty_op;
47974864
4798 const operand = try func.resolveInst(ty_op.operand);4865 const operand = try func.resolveInst(ty_op.operand);
4799 const dest_ty = func.typeOfIndex(inst);
4800 const op_ty = func.typeOf(ty_op.operand);4866 const op_ty = func.typeOf(ty_op.operand);
4867 const op_bits = op_ty.floatBits(func.target);
4868
4869 const dest_ty = func.typeOfIndex(inst);
4870 const dest_info = dest_ty.intInfo(mod);
4871
4872 if (dest_info.bits > 128) {
4873 return func.fail("TODO: intFromFloat for integers/floats with bitsize {}", .{dest_info.bits});
4874 }
4875
4876 if ((op_bits != 32 and op_bits != 64) or dest_info.bits > 64) {
4877 const dest_bitsize = if (dest_info.bits <= 16) 16 else std.math.ceilPowerOfTwoAssert(u16, dest_info.bits);
4878
4879 var fn_name_buf: [16]u8 = undefined;
4880 const fn_name = std.fmt.bufPrint(&fn_name_buf, "__fix{s}{s}f{s}i", .{
4881 switch (dest_info.signedness) {
4882 .signed => "",
4883 .unsigned => "uns",
4884 },
4885 target_util.compilerRtFloatAbbrev(op_bits),
4886 target_util.compilerRtIntAbbrev(dest_bitsize),
4887 }) catch unreachable;
48014888
4802 if (op_ty.abiSize(mod) > 8) {4889 const result = try (try func.callIntrinsic(fn_name, &.{op_ty.ip_index}, dest_ty, &.{operand})).toLocal(func, dest_ty);
4803 return func.fail("TODO: intFromFloat for integers/floats with bitsize larger than 64 bits", .{});4890 return func.finishAir(inst, result, &.{ty_op.operand});
4804 }4891 }
48054892
4806 try func.emitWValue(operand);4893 try func.emitWValue(operand);
...@@ -4808,7 +4895,7 @@ fn airIntFromFloat(func: *CodeGen, inst: Air.Inst.Index) InnerError!void {...@@ -4808,7 +4895,7 @@ fn airIntFromFloat(func: *CodeGen, inst: Air.Inst.Index) InnerError!void {
4808 .op = .trunc,4895 .op = .trunc,
4809 .valtype1 = typeToValtype(dest_ty, mod),4896 .valtype1 = typeToValtype(dest_ty, mod),
4810 .valtype2 = typeToValtype(op_ty, mod),4897 .valtype2 = typeToValtype(op_ty, mod),
4811 .signedness = if (dest_ty.isSignedInt(mod)) .signed else .unsigned,4898 .signedness = dest_info.signedness,
4812 });4899 });
4813 try func.addTag(Mir.Inst.Tag.fromOpcode(op));4900 try func.addTag(Mir.Inst.Tag.fromOpcode(op));
4814 const wrapped = try func.wrapOperand(.{ .stack = {} }, dest_ty);4901 const wrapped = try func.wrapOperand(.{ .stack = {} }, dest_ty);
...@@ -4821,11 +4908,31 @@ fn airFloatFromInt(func: *CodeGen, inst: Air.Inst.Index) InnerError!void {...@@ -4821,11 +4908,31 @@ fn airFloatFromInt(func: *CodeGen, inst: Air.Inst.Index) InnerError!void {
4821 const ty_op = func.air.instructions.items(.data)[inst].ty_op;4908 const ty_op = func.air.instructions.items(.data)[inst].ty_op;
48224909
4823 const operand = try func.resolveInst(ty_op.operand);4910 const operand = try func.resolveInst(ty_op.operand);
4824 const dest_ty = func.typeOfIndex(inst);
4825 const op_ty = func.typeOf(ty_op.operand);4911 const op_ty = func.typeOf(ty_op.operand);
4912 const op_info = op_ty.intInfo(mod);
4913
4914 const dest_ty = func.typeOfIndex(inst);
4915 const dest_bits = dest_ty.floatBits(func.target);
4916
4917 if (op_info.bits > 128) {
4918 return func.fail("TODO: floatFromInt for integers/floats with bitsize {d} bits", .{op_info.bits});
4919 }
4920
4921 if (op_info.bits > 64 or (dest_bits > 64 or dest_bits < 32)) {
4922 const op_bitsize = if (op_info.bits <= 16) 16 else std.math.ceilPowerOfTwoAssert(u16, op_info.bits);
4923
4924 var fn_name_buf: [16]u8 = undefined;
4925 const fn_name = std.fmt.bufPrint(&fn_name_buf, "__float{s}{s}i{s}f", .{
4926 switch (op_info.signedness) {
4927 .signed => "",
4928 .unsigned => "un",
4929 },
4930 target_util.compilerRtIntAbbrev(op_bitsize),
4931 target_util.compilerRtFloatAbbrev(dest_bits),
4932 }) catch unreachable;
48264933
4827 if (op_ty.abiSize(mod) > 8) {4934 const result = try (try func.callIntrinsic(fn_name, &.{op_ty.ip_index}, dest_ty, &.{operand})).toLocal(func, dest_ty);
4828 return func.fail("TODO: floatFromInt for integers/floats with bitsize larger than 64 bits", .{});4935 return func.finishAir(inst, result, &.{ty_op.operand});
4829 }4936 }
48304937
4831 try func.emitWValue(operand);4938 try func.emitWValue(operand);
...@@ -4833,7 +4940,7 @@ fn airFloatFromInt(func: *CodeGen, inst: Air.Inst.Index) InnerError!void {...@@ -4833,7 +4940,7 @@ fn airFloatFromInt(func: *CodeGen, inst: Air.Inst.Index) InnerError!void {
4833 .op = .convert,4940 .op = .convert,
4834 .valtype1 = typeToValtype(dest_ty, mod),4941 .valtype1 = typeToValtype(dest_ty, mod),
4835 .valtype2 = typeToValtype(op_ty, mod),4942 .valtype2 = typeToValtype(op_ty, mod),
4836 .signedness = if (op_ty.isSignedInt(mod)) .signed else .unsigned,4943 .signedness = op_info.signedness,
4837 });4944 });
4838 try func.addTag(Mir.Inst.Tag.fromOpcode(op));4945 try func.addTag(Mir.Inst.Tag.fromOpcode(op));
48394946
test/behavior/bitcast.zig-1
...@@ -416,7 +416,6 @@ test "bitcast nan float does not modify signaling bit" {...@@ -416,7 +416,6 @@ test "bitcast nan float does not modify signaling bit" {
416 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO416 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
417 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO417 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
418 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO418 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
419 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
420 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;419 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
421 // TODO: https://github.com/ziglang/zig/issues/14366420 // TODO: https://github.com/ziglang/zig/issues/14366
422 if (builtin.zig_backend == .stage2_llvm and comptime builtin.cpu.arch.isArmOrThumb()) return error.SkipZigTest;421 if (builtin.zig_backend == .stage2_llvm and comptime builtin.cpu.arch.isArmOrThumb()) return error.SkipZigTest;
test/behavior/cast.zig-5
...@@ -120,7 +120,6 @@ test "@floatFromInt(f80)" {...@@ -120,7 +120,6 @@ test "@floatFromInt(f80)" {
120 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO120 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
121 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO121 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
122 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO122 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
123 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
124 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO123 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
125 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;124 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
126 if (builtin.zig_backend == .stage2_c and comptime builtin.cpu.arch.isArmOrThumb()) return error.SkipZigTest;125 if (builtin.zig_backend == .stage2_c and comptime builtin.cpu.arch.isArmOrThumb()) return error.SkipZigTest;
...@@ -1248,7 +1247,6 @@ fn castToOptionalSlice() ?[]const u8 {...@@ -1248,7 +1247,6 @@ fn castToOptionalSlice() ?[]const u8 {
1248test "cast u128 to f128 and back" {1247test "cast u128 to f128 and back" {
1249 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;1248 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
1250 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO1249 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1251 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1252 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO1250 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
1253 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;1251 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
12541252
...@@ -1392,7 +1390,6 @@ test "cast f16 to wider types" {...@@ -1392,7 +1390,6 @@ test "cast f16 to wider types" {
1392 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;1390 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
1393 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO1391 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1394 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO1392 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
1395 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1396 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO1393 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
1397 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;1394 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
1398 if (builtin.zig_backend == .stage2_c and comptime builtin.cpu.arch.isArmOrThumb()) return error.SkipZigTest;1395 if (builtin.zig_backend == .stage2_c and comptime builtin.cpu.arch.isArmOrThumb()) return error.SkipZigTest;
...@@ -1413,7 +1410,6 @@ test "cast f128 to narrower types" {...@@ -1413,7 +1410,6 @@ test "cast f128 to narrower types" {
1413 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;1410 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
1414 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO1411 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1415 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO1412 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
1416 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1417 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO1413 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
1418 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;1414 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
14191415
...@@ -1503,7 +1499,6 @@ test "coerce between pointers of compatible differently-named floats" {...@@ -1503,7 +1499,6 @@ test "coerce between pointers of compatible differently-named floats" {
1503 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO1499 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
1504 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO1500 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1505 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO1501 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
1506 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1507 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO1502 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
1508 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;1503 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
15091504
test/behavior/floatop.zig-17
...@@ -71,7 +71,6 @@ fn testDifferentSizedFloatComparisons() !void {...@@ -71,7 +71,6 @@ fn testDifferentSizedFloatComparisons() !void {
71}71}
7272
73test "f80 comparisons" {73test "f80 comparisons" {
74 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
75 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO74 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
76 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO75 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
77 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO76 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
...@@ -571,7 +570,6 @@ fn testFabsWithVectors() !void {...@@ -571,7 +570,6 @@ fn testFabsWithVectors() !void {
571}570}
572571
573test "another, possibly redundant, @fabs test" {572test "another, possibly redundant, @fabs test" {
574 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
575 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO573 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
576 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO574 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
577 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO575 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
...@@ -594,7 +592,6 @@ test "another, possibly redundant, @fabs test" {...@@ -594,7 +592,6 @@ test "another, possibly redundant, @fabs test" {
594}592}
595593
596test "@fabs f80" {594test "@fabs f80" {
597 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
598 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO595 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
599 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO596 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
600 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO597 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
...@@ -612,7 +609,6 @@ fn testFabsLegacy(comptime T: type, x: T) !void {...@@ -612,7 +609,6 @@ fn testFabsLegacy(comptime T: type, x: T) !void {
612}609}
613610
614test "a third @fabs test, surely there should not be three fabs tests" {611test "a third @fabs test, surely there should not be three fabs tests" {
615 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
616 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO612 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
617 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO613 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
618 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO614 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
...@@ -704,7 +700,6 @@ test "another, possibly redundant, @floor test" {...@@ -704,7 +700,6 @@ test "another, possibly redundant, @floor test" {
704}700}
705701
706test "@floor f80" {702test "@floor f80" {
707 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
708 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO703 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
709 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO704 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
710 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO705 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
...@@ -721,7 +716,6 @@ test "@floor f80" {...@@ -721,7 +716,6 @@ test "@floor f80" {
721}716}
722717
723test "@floor f128" {718test "@floor f128" {
724 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
725 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO719 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
726 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO720 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
727 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO721 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
...@@ -802,7 +796,6 @@ test "another, possibly redundant, @ceil test" {...@@ -802,7 +796,6 @@ test "another, possibly redundant, @ceil test" {
802}796}
803797
804test "@ceil f80" {798test "@ceil f80" {
805 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
806 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO799 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
807 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO800 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
808 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO801 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
...@@ -819,7 +812,6 @@ test "@ceil f80" {...@@ -819,7 +812,6 @@ test "@ceil f80" {
819}812}
820813
821test "@ceil f128" {814test "@ceil f128" {
822 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
823 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO815 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
824 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO816 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
825 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO817 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
...@@ -899,7 +891,6 @@ test "another, possibly redundant, @trunc test" {...@@ -899,7 +891,6 @@ test "another, possibly redundant, @trunc test" {
899}891}
900892
901test "@trunc f80" {893test "@trunc f80" {
902 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
903 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO894 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
904 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO895 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
905 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO896 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
...@@ -922,7 +913,6 @@ test "@trunc f80" {...@@ -922,7 +913,6 @@ test "@trunc f80" {
922}913}
923914
924test "@trunc f128" {915test "@trunc f128" {
925 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
926 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO916 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
927 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO917 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
928 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO918 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
...@@ -1017,7 +1007,6 @@ test "negation f80" {...@@ -1017,7 +1007,6 @@ test "negation f80" {
1017 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO1007 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
1018 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO1008 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1019 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO1009 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
1020 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1021 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO1010 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
1022 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;1011 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
10231012
...@@ -1039,7 +1028,6 @@ test "negation f128" {...@@ -1039,7 +1028,6 @@ test "negation f128" {
1039 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO1028 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
1040 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO1029 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1041 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO1030 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
1042 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1043 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO1031 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
1044 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;1032 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
10451033
...@@ -1081,7 +1069,6 @@ test "f128 at compile time is lossy" {...@@ -1081,7 +1069,6 @@ test "f128 at compile time is lossy" {
1081}1069}
10821070
1083test "comptime fixed-width float zero divided by zero produces NaN" {1071test "comptime fixed-width float zero divided by zero produces NaN" {
1084 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1085 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO1072 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
1086 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO1073 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1087 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO1074 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
...@@ -1094,7 +1081,6 @@ test "comptime fixed-width float zero divided by zero produces NaN" {...@@ -1094,7 +1081,6 @@ test "comptime fixed-width float zero divided by zero produces NaN" {
1094}1081}
10951082
1096test "comptime fixed-width float non-zero divided by zero produces signed Inf" {1083test "comptime fixed-width float non-zero divided by zero produces signed Inf" {
1097 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1098 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO1084 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1099 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO1085 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
1100 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO1086 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
...@@ -1153,7 +1139,6 @@ test "nan negation f32" {...@@ -1153,7 +1139,6 @@ test "nan negation f32" {
1153}1139}
11541140
1155test "nan negation f64" {1141test "nan negation f64" {
1156 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1157 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO1142 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
1158 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO1143 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1159 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO1144 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
...@@ -1173,7 +1158,6 @@ test "nan negation f64" {...@@ -1173,7 +1158,6 @@ test "nan negation f64" {
1173}1158}
11741159
1175test "nan negation f128" {1160test "nan negation f128" {
1176 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1177 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO1161 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
1178 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO1162 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1179 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO1163 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
...@@ -1193,7 +1177,6 @@ test "nan negation f128" {...@@ -1193,7 +1177,6 @@ test "nan negation f128" {
1193}1177}
11941178
1195test "nan negation f80" {1179test "nan negation f80" {
1196 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1197 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO1180 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
1198 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO1181 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
1199 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO1182 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
test/behavior/math.zig-8
...@@ -628,7 +628,6 @@ fn testShrTrunc(x: u16) !void {...@@ -628,7 +628,6 @@ fn testShrTrunc(x: u16) !void {
628}628}
629629
630test "f128" {630test "f128" {
631 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
632 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO631 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
633 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO632 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
634 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO633 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
...@@ -1430,7 +1429,6 @@ fn fmodOne(comptime T: type, a: T, b: T, c: T, epsilon: T) !void {...@@ -1430,7 +1429,6 @@ fn fmodOne(comptime T: type, a: T, b: T, c: T, epsilon: T) !void {
1430}1429}
14311430
1432test "@round" {1431test "@round" {
1433 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1434 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO1432 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1435 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO1433 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
1436 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO1434 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
...@@ -1451,7 +1449,6 @@ test "@round" {...@@ -1451,7 +1449,6 @@ test "@round" {
1451}1449}
14521450
1453test "@round f80" {1451test "@round f80" {
1454 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1455 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO1452 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1456 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO1453 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
1457 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO1454 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
...@@ -1464,7 +1461,6 @@ test "@round f80" {...@@ -1464,7 +1461,6 @@ test "@round f80" {
1464}1461}
14651462
1466test "@round f128" {1463test "@round f128" {
1467 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1468 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO1464 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1469 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO1465 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
1470 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO1466 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
...@@ -1505,7 +1501,6 @@ test "vector integer addition" {...@@ -1505,7 +1501,6 @@ test "vector integer addition" {
1505}1501}
15061502
1507test "NaN comparison" {1503test "NaN comparison" {
1508 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1509 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO1504 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1510 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO1505 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
1511 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO1506 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
...@@ -1523,7 +1518,6 @@ test "NaN comparison" {...@@ -1523,7 +1518,6 @@ test "NaN comparison" {
1523}1518}
15241519
1525test "NaN comparison f80" {1520test "NaN comparison f80" {
1526 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1527 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO1521 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1528 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO1522 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
1529 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO1523 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
...@@ -1577,7 +1571,6 @@ test "compare undefined literal with comptime_int" {...@@ -1577,7 +1571,6 @@ test "compare undefined literal with comptime_int" {
1577}1571}
15781572
1579test "signed zeros are represented properly" {1573test "signed zeros are represented properly" {
1580 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1581 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO1574 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1582 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO1575 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
1583 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO1576 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
...@@ -1612,7 +1605,6 @@ test "comptime sin and ln" {...@@ -1612,7 +1605,6 @@ test "comptime sin and ln" {
1612}1605}
16131606
1614test "absFloat" {1607test "absFloat" {
1615 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1616 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO1608 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1617 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO1609 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
1618 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO1610 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
test/behavior/maximum_minimum.zig-2
...@@ -104,7 +104,6 @@ test "@min for vectors" {...@@ -104,7 +104,6 @@ test "@min for vectors" {
104}104}
105105
106test "@min/max for floats" {106test "@min/max for floats" {
107 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
108 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO107 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
109 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO108 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
110 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO109 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
...@@ -198,7 +197,6 @@ test "@min/@max notices vector bounds" {...@@ -198,7 +197,6 @@ test "@min/@max notices vector bounds" {
198}197}
199198
200test "@min/@max on comptime_int" {199test "@min/@max on comptime_int" {
201 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
202 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO200 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
203 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO201 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
204 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO202 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
test/behavior/muladd.zig-2
...@@ -50,7 +50,6 @@ fn testMulAdd16() !void {...@@ -50,7 +50,6 @@ fn testMulAdd16() !void {
50}50}
5151
52test "@mulAdd f80" {52test "@mulAdd f80" {
53 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
54 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO53 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
55 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO54 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
56 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO55 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
...@@ -70,7 +69,6 @@ fn testMulAdd80() !void {...@@ -70,7 +69,6 @@ fn testMulAdd80() !void {
70}69}
7170
72test "@mulAdd f128" {71test "@mulAdd f128" {
73 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
74 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO72 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
75 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO73 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
76 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO74 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
test/behavior/widening.zig-2
...@@ -40,7 +40,6 @@ test "implicit unsigned integer to signed integer" {...@@ -40,7 +40,6 @@ test "implicit unsigned integer to signed integer" {
40}40}
4141
42test "float widening" {42test "float widening" {
43 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
44 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO43 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
45 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO44 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
46 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO45 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
...@@ -61,7 +60,6 @@ test "float widening" {...@@ -61,7 +60,6 @@ test "float widening" {
61}60}
6261
63test "float widening f16 to f128" {62test "float widening f16 to f128" {
64 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
65 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO63 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
66 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO64 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
67 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO65 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO