From 35c0d4bbe1f3b0abeed74c2ee59927a65daec658 Mon Sep 17 00:00:00 2001 From: dan sinclair Date: Tue, 14 Apr 2020 20:32:07 +0000 Subject: [PATCH] [spirv-writer] Add subtracting generation. This CL adds generation of the OpFSub and OpISub SPIR-V commands from the subtraction binary expression. Bug: tint:5 Change-Id: Ia25a855a972057a4cac70d538946e176e0a0e5c3 Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/19505 Reviewed-by: David Neto --- src/writer/spirv/builder.cc | 2 ++ src/writer/spirv/builder_binary_expression_test.cc | 10 ++++++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/writer/spirv/builder.cc b/src/writer/spirv/builder.cc index 8bf9da499b..6ca08d28a4 100644 --- a/src/writer/spirv/builder.cc +++ b/src/writer/spirv/builder.cc @@ -619,6 +619,8 @@ uint32_t Builder::GenerateBinaryExpression(ast::BinaryExpression* expr) { op = lhs_is_float_or_vec ? spv::Op::OpFOrdNotEqual : spv::Op::OpINotEqual; } else if (expr->IsOr()) { op = spv::Op::OpBitwiseOr; + } else if (expr->IsSubtract()) { + op = lhs_is_float_or_vec ? spv::Op::OpFSub : spv::Op::OpISub; } else if (expr->IsXor()) { op = spv::Op::OpBitwiseXor; } else { diff --git a/src/writer/spirv/builder_binary_expression_test.cc b/src/writer/spirv/builder_binary_expression_test.cc index 796ec8f1b0..7c5f5bb08f 100644 --- a/src/writer/spirv/builder_binary_expression_test.cc +++ b/src/writer/spirv/builder_binary_expression_test.cc @@ -124,6 +124,7 @@ INSTANTIATE_TEST_SUITE_P( testing::Values(BinaryData{ast::BinaryOp::kAdd, "OpIAdd"}, BinaryData{ast::BinaryOp::kAnd, "OpBitwiseAnd"}, BinaryData{ast::BinaryOp::kOr, "OpBitwiseOr"}, + BinaryData{ast::BinaryOp::kSubtract, "OpISub"}, BinaryData{ast::BinaryOp::kXor, "OpBitwiseXor"})); using BinaryArithFloatTest = testing::TestWithParam; @@ -199,10 +200,11 @@ TEST_P(BinaryArithFloatTest, Vector) { EXPECT_EQ(DumpInstructions(b.functions()[0].instructions()), "%5 = " + param.name + " %1 %4 %4\n"); } -INSTANTIATE_TEST_SUITE_P(BuilderTest, - BinaryArithFloatTest, - testing::Values(BinaryData{ast::BinaryOp::kAdd, - "OpFAdd"})); +INSTANTIATE_TEST_SUITE_P( + BuilderTest, + BinaryArithFloatTest, + testing::Values(BinaryData{ast::BinaryOp::kAdd, "OpFAdd"}, + BinaryData{ast::BinaryOp::kSubtract, "OpFSub"})); using BinaryCompareUnsignedIntegerTest = testing::TestWithParam; TEST_P(BinaryCompareUnsignedIntegerTest, Scalar) {