Skip to content
This repository was archived by the owner on Nov 1, 2021. It is now read-only.

Commit 29b8099

Browse files
authored
Merge pull request #230 from juj/fix_frem_for_precise_f32
fix_frem_for_precise_f32
2 parents 732fa16 + cc4c730 commit 29b8099

File tree

1 file changed

+4
-1
lines changed

1 file changed

+4
-1
lines changed

lib/Target/JSBackend/JSBackend.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2668,7 +2668,10 @@ void JSWriter::generateExpression(const User *I, raw_string_ostream& Code) {
26682668
case Instruction::FAdd: Code << ensureFloat(getValueAsStr(I->getOperand(0)) + " + " + getValueAsStr(I->getOperand(1)), I->getType()); break;
26692669
case Instruction::FMul: Code << ensureFloat(getValueAsStr(I->getOperand(0)) + " * " + getValueAsStr(I->getOperand(1)), I->getType()); break;
26702670
case Instruction::FDiv: Code << ensureFloat(getValueAsStr(I->getOperand(0)) + " / " + getValueAsStr(I->getOperand(1)), I->getType()); break;
2671-
case Instruction::FRem: Code << ensureFloat(getValueAsStr(I->getOperand(0)) + " % " + getValueAsStr(I->getOperand(1)), I->getType()); break;
2671+
case Instruction::FRem:
2672+
if (PreciseF32 && !I->getType()->isDoubleTy()) Code << ensureFloat("+(" + getValueAsStr(I->getOperand(0)) + ") % +(" + getValueAsStr(I->getOperand(1)) + ")", I->getType());
2673+
else Code << ensureFloat(getValueAsStr(I->getOperand(0)) + " % " + getValueAsStr(I->getOperand(1)), I->getType());
2674+
break;
26722675
case Instruction::FSub:
26732676
// LLVM represents an fneg(x) as -0.0 - x.
26742677
if (BinaryOperator::isFNeg(I)) {

0 commit comments

Comments
 (0)