Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(197)

Unified Diff: src/typing-asm.cc

Issue 1423563008: Fixing asm typing issues. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: fix Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | test/cctest/test-asm-validator.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/typing-asm.cc
diff --git a/src/typing-asm.cc b/src/typing-asm.cc
index d9678846671ce98161f620281a6874a8529f1d67..7cf380c438cd3f89444f06457fef99ef127e35e2 100644
--- a/src/typing-asm.cc
+++ b/src/typing-asm.cc
@@ -815,12 +815,16 @@ void AsmTyper::VisitBinaryOperation(BinaryOperation* expr) {
case Token::SAR: {
// BIT_OR allows Any since it is used as a type coercion.
// BIT_XOR allows Number since it is used as a type coercion (encoding ~).
- Type* expectation =
- expr->op() == Token::BIT_OR
- ? Type::Any()
- : expr->op() == Token::BIT_XOR ? Type::Number() : cache_.kInt32;
- Type* result =
- expr->op() == Token::SHR ? Type::Unsigned32() : cache_.kInt32;
+ // SHR allows Number since it is used as a type coercion to uint32.
+ Type* expectation;
titzer 2015/11/02 22:57:15 Is it time for a helper function where each case p
bradn 2015/11/03 00:10:24 Done.
+ if (expr->op() == Token::BIT_OR) {
+ expectation = Type::Any();
+ } else if (expr->op() == Token::BIT_XOR ||
+ expr->op() == Token::SHR) {
+ expectation = Type::Number();
+ } else {
+ expectation = cache_.kInt32;
+ }
RECURSE(VisitWithExpectation(expr->left(), expectation,
"left bit operand expected to be integer"));
int left_intish = intish_;
@@ -834,6 +838,8 @@ void AsmTyper::VisitBinaryOperation(BinaryOperation* expr) {
FAIL(expr, "too many consecutive additive ops");
}
intish_ = 0;
+ Type* result =
+ expr->op() == Token::SHR ? cache_.kUint32 : cache_.kInt32;
IntersectResult(expr, result);
return;
}
@@ -899,7 +905,10 @@ void AsmTyper::VisitCompareOperation(CompareOperation* expr) {
Type* right_type = computed_type_;
Type* type = Type::Union(left_type, right_type, zone());
expr->set_combined_type(type);
- if (type->Is(Type::Integral32()) || type->Is(Type::UntaggedFloat64())) {
+ if (type->Is(cache_.kInt32) ||
+ type->Is(cache_.kUint32) ||
+ type->Is(cache_.kFloat32) ||
+ type->Is(cache_.kFloat64)) {
IntersectResult(expr, cache_.kInt32);
} else {
FAIL(expr, "ill-typed comparison operation");
« no previous file with comments | « no previous file | test/cctest/test-asm-validator.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698