From ad4d38dd757a793c2650c3e318f9d63f60c82180 Mon Sep 17 00:00:00 2001 From: Alon Zakai Date: Sun, 14 Sep 2014 16:02:00 -0700 Subject: [PATCH 1/2] do nothing on SIMD return values, and fix doing nothing to coerce SIMD values --- lib/Target/JSBackend/JSBackend.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/Target/JSBackend/JSBackend.cpp b/lib/Target/JSBackend/JSBackend.cpp index c5ddaa895db..cfadcdc0757 100644 --- a/lib/Target/JSBackend/JSBackend.cpp +++ b/lib/Target/JSBackend/JSBackend.cpp @@ -669,7 +669,9 @@ std::string JSWriter::getCast(const StringRef &s, Type *t, AsmCast sign) { switch (t->getTypeID()) { default: { // some types we cannot cast, like vectors - ignore - if (!t->isVectorTy()) { errs() << *t << "\n"; assert(false && "Unsupported type");} + if (t->isVectorTy()) return s; + errs() << *t << "\n"; + assert(false && "Unsupported type"); } case Type::FloatTyID: { if (PreciseF32 && !(sign & ASM_FFI_OUT)) { @@ -1131,6 +1133,8 @@ bool JSWriter::generateSIMDExpression(const User *I, raw_string_ostream& Code) { switch (Operator::getOpcode(I)) { default: I->dump(); error("invalid vector instr"); break; + case Instruction::Call: // return value is just a SIMD value, no special handling + return false; case Instruction::PHI: // handled separately - we push them back into the relooper branchings break; case Instruction::FAdd: Code << getAssignIfNeeded(I) << "SIMD.float32x4.add(" << getValueAsStr(I->getOperand(0)) << "," << getValueAsStr(I->getOperand(1)) << ")"; break; From cb3766716cf8e9b85ca40b23c416bcbf23cbd11a Mon Sep 17 00:00:00 2001 From: Alon Zakai Date: Mon, 15 Sep 2014 15:29:35 -0700 Subject: [PATCH 2/2] 1.24.0 --- emscripten-version.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/emscripten-version.txt b/emscripten-version.txt index 5416318ab2a..7ae54502c61 100644 --- a/emscripten-version.txt +++ b/emscripten-version.txt @@ -1,2 +1,2 @@ -1.23.5 +1.24.0