[spirv-reader] Add bitwise operators

Bug: tint:3
Change-Id: I4ebaafcf2a234dd6c217241f0fb0dd6ee5684a7a
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/19561
Reviewed-by: dan sinclair <dsinclair@google.com>
This commit is contained in:
David Neto 2020-04-15 13:57:20 +00:00 committed by dan sinclair
parent 641208c2b1
commit fae8368dfe
2 changed files with 104 additions and 0 deletions

View File

@ -58,6 +58,12 @@ ast::BinaryOp ConvertBinaryOp(SpvOp opcode) {
return ast::BinaryOp::kEqual; return ast::BinaryOp::kEqual;
case SpvOpINotEqual: case SpvOpINotEqual:
return ast::BinaryOp::kNotEqual; return ast::BinaryOp::kNotEqual;
case SpvOpBitwiseAnd:
return ast::BinaryOp::kAnd;
case SpvOpBitwiseOr:
return ast::BinaryOp::kOr;
case SpvOpBitwiseXor:
return ast::BinaryOp::kXor;
default: default:
break; break;
} }

View File

@ -350,6 +350,104 @@ INSTANTIATE_TEST_SUITE_P(
"v2uint_20_10", "__vec_2__i32", AstFor("v2int_40_30"), "v2uint_20_10", "__vec_2__i32", AstFor("v2int_40_30"),
"shift_right_arith", AstFor("v2uint_20_10")})); "shift_right_arith", AstFor("v2uint_20_10")}));
INSTANTIATE_TEST_SUITE_P(
SpvParserTest_BitwiseAnd,
SpvBinaryTest,
::testing::Values(
// Both uint
BinaryData{"uint", "uint_10", "OpBitwiseAnd", "uint_20", "__u32",
"ScalarConstructor{10}", "and", "ScalarConstructor{20}"},
// Both int
BinaryData{"int", "int_30", "OpBitwiseAnd", "int_40", "__i32",
"ScalarConstructor{30}", "and", "ScalarConstructor{40}"},
// Mixed, returning uint
BinaryData{"uint", "int_30", "OpBitwiseAnd", "uint_10", "__u32",
"ScalarConstructor{30}", "and", "ScalarConstructor{10}"},
// Mixed, returning int
BinaryData{"int", "int_30", "OpBitwiseAnd", "uint_10", "__i32",
"ScalarConstructor{30}", "and", "ScalarConstructor{10}"},
// Both v2uint
BinaryData{"v2uint", "v2uint_10_20", "OpBitwiseAnd", "v2uint_20_10",
"__vec_2__u32", AstFor("v2uint_10_20"), "and",
AstFor("v2uint_20_10")},
// Both v2int
BinaryData{"v2int", "v2int_30_40", "OpBitwiseAnd", "v2int_40_30",
"__vec_2__i32", AstFor("v2int_30_40"), "and",
AstFor("v2int_40_30")},
// Mixed, returning v2uint
BinaryData{"v2uint", "v2int_30_40", "OpBitwiseAnd", "v2uint_10_20",
"__vec_2__u32", AstFor("v2int_30_40"), "and",
AstFor("v2uint_10_20")},
// Mixed, returning v2int
BinaryData{"v2int", "v2int_40_30", "OpBitwiseAnd", "v2uint_20_10",
"__vec_2__i32", AstFor("v2int_40_30"), "and",
AstFor("v2uint_20_10")}));
INSTANTIATE_TEST_SUITE_P(
SpvParserTest_BitwiseOr,
SpvBinaryTest,
::testing::Values(
// Both uint
BinaryData{"uint", "uint_10", "OpBitwiseOr", "uint_20", "__u32",
"ScalarConstructor{10}", "or", "ScalarConstructor{20}"},
// Both int
BinaryData{"int", "int_30", "OpBitwiseOr", "int_40", "__i32",
"ScalarConstructor{30}", "or", "ScalarConstructor{40}"},
// Mixed, returning uint
BinaryData{"uint", "int_30", "OpBitwiseOr", "uint_10", "__u32",
"ScalarConstructor{30}", "or", "ScalarConstructor{10}"},
// Mixed, returning int
BinaryData{"int", "int_30", "OpBitwiseOr", "uint_10", "__i32",
"ScalarConstructor{30}", "or", "ScalarConstructor{10}"},
// Both v2uint
BinaryData{"v2uint", "v2uint_10_20", "OpBitwiseOr", "v2uint_20_10",
"__vec_2__u32", AstFor("v2uint_10_20"), "or",
AstFor("v2uint_20_10")},
// Both v2int
BinaryData{"v2int", "v2int_30_40", "OpBitwiseOr", "v2int_40_30",
"__vec_2__i32", AstFor("v2int_30_40"), "or",
AstFor("v2int_40_30")},
// Mixed, returning v2uint
BinaryData{"v2uint", "v2int_30_40", "OpBitwiseOr", "v2uint_10_20",
"__vec_2__u32", AstFor("v2int_30_40"), "or",
AstFor("v2uint_10_20")},
// Mixed, returning v2int
BinaryData{"v2int", "v2int_40_30", "OpBitwiseOr", "v2uint_20_10",
"__vec_2__i32", AstFor("v2int_40_30"), "or",
AstFor("v2uint_20_10")}));
INSTANTIATE_TEST_SUITE_P(
SpvParserTest_BitwiseXor,
SpvBinaryTest,
::testing::Values(
// Both uint
BinaryData{"uint", "uint_10", "OpBitwiseXor", "uint_20", "__u32",
"ScalarConstructor{10}", "xor", "ScalarConstructor{20}"},
// Both int
BinaryData{"int", "int_30", "OpBitwiseXor", "int_40", "__i32",
"ScalarConstructor{30}", "xor", "ScalarConstructor{40}"},
// Mixed, returning uint
BinaryData{"uint", "int_30", "OpBitwiseXor", "uint_10", "__u32",
"ScalarConstructor{30}", "xor", "ScalarConstructor{10}"},
// Mixed, returning int
BinaryData{"int", "int_30", "OpBitwiseXor", "uint_10", "__i32",
"ScalarConstructor{30}", "xor", "ScalarConstructor{10}"},
// Both v2uint
BinaryData{"v2uint", "v2uint_10_20", "OpBitwiseXor", "v2uint_20_10",
"__vec_2__u32", AstFor("v2uint_10_20"), "xor",
AstFor("v2uint_20_10")},
// Both v2int
BinaryData{"v2int", "v2int_30_40", "OpBitwiseXor", "v2int_40_30",
"__vec_2__i32", AstFor("v2int_30_40"), "xor",
AstFor("v2int_40_30")},
// Mixed, returning v2uint
BinaryData{"v2uint", "v2int_30_40", "OpBitwiseXor", "v2uint_10_20",
"__vec_2__u32", AstFor("v2int_30_40"), "xor",
AstFor("v2uint_10_20")},
// Mixed, returning v2int
BinaryData{"v2int", "v2int_40_30", "OpBitwiseXor", "v2uint_20_10",
"__vec_2__i32", AstFor("v2int_40_30"), "xor",
AstFor("v2uint_20_10")}));
} // namespace } // namespace
} // namespace spirv } // namespace spirv
} // namespace reader } // namespace reader