diff options
author | Alon Zakai <alonzakai@gmail.com> | 2012-04-09 15:33:26 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2012-04-09 15:33:26 -0700 |
commit | 7d71275571b6a4ea2c28eb6c1d47646491f23ad4 (patch) | |
tree | 74a42122485607399e6a0aa5f7857f351ba3305e | |
parent | 92491f7a86440d3d1776fda00d8755f47a1215a0 (diff) | |
parent | 0779f9cc2e182cf1743adfa2174dbfca5904917f (diff) |
Merge pull request #370 from brson/frem
Support frem instruction
-rw-r--r-- | AUTHORS | 2 | ||||
-rw-r--r-- | src/parseTools.js | 3 | ||||
-rw-r--r-- | tests/cases/frem.ll | 13 | ||||
-rw-r--r-- | tests/cases/frem.txt | 1 |
4 files changed, 17 insertions, 2 deletions
@@ -19,4 +19,4 @@ under the licensing terms detailed in LICENSE. * Behdad Esfahbod <behdad@behdad.org> * David Benjamin <davidben@mit.edu> * Pierre Renaux <pierre@talansoft.com> - +* Brian Anderson <banderson@mozilla.com> diff --git a/src/parseTools.js b/src/parseTools.js index 428c2b25..2daf9589 100644 --- a/src/parseTools.js +++ b/src/parseTools.js @@ -412,7 +412,7 @@ function cleanSegment(segment) { return segment; } -var MATHOPS = set(['add', 'sub', 'sdiv', 'udiv', 'mul', 'icmp', 'zext', 'urem', 'srem', 'fadd', 'fsub', 'fmul', 'fdiv', 'fcmp', 'uitofp', 'sitofp', 'fpext', 'fptrunc', 'fptoui', 'fptosi', 'trunc', 'sext', 'select', 'shl', 'shr', 'ashl', 'ashr', 'lshr', 'lshl', 'xor', 'or', 'and', 'ptrtoint', 'inttoptr']); +var MATHOPS = set(['add', 'sub', 'sdiv', 'udiv', 'mul', 'icmp', 'zext', 'urem', 'srem', 'fadd', 'fsub', 'fmul', 'fdiv', 'fcmp', 'frem', 'uitofp', 'sitofp', 'fpext', 'fptrunc', 'fptoui', 'fptosi', 'trunc', 'sext', 'select', 'shl', 'shr', 'ashl', 'ashr', 'lshr', 'lshl', 'xor', 'or', 'and', 'ptrtoint', 'inttoptr']); var PARSABLE_LLVM_FUNCTIONS = set('getelementptr', 'bitcast'); mergeInto(PARSABLE_LLVM_FUNCTIONS, MATHOPS); @@ -1823,6 +1823,7 @@ function processMathop(item) { case 'fsub': return getFastValue(idents[0], '-', idents[1], item.type); case 'fdiv': return getFastValue(idents[0], '/', idents[1], item.type); case 'fmul': return getFastValue(idents[0], '*', idents[1], item.type); + case 'frem': return getFastValue(idents[0], '%', idents[1], item.type); case 'uitofp': case 'sitofp': return idents[0]; case 'fptoui': case 'fptosi': return makeRounding(idents[0], bitsLeft, op === 'fptosi', true); diff --git a/tests/cases/frem.ll b/tests/cases/frem.ll new file mode 100644 index 00000000..442cd04c --- /dev/null +++ b/tests/cases/frem.ll @@ -0,0 +1,13 @@ +target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:32:32-n8:16:32" +target triple = "i386-pc-linux-gnu" + +@.str2 = private constant [6 x i8] c"*%f*\0A\00", align 1 ; [#uses=1] + +declare i32 @printf(i8* noalias, ...) nounwind + +define i32 @main() { +entry: + %c = frem double 2.5, 1.0 + %call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([6 x i8]* @.str2, i32 0, i32 0), double %c) + ret i32 0 +} diff --git a/tests/cases/frem.txt b/tests/cases/frem.txt new file mode 100644 index 00000000..3a7ecb6a --- /dev/null +++ b/tests/cases/frem.txt @@ -0,0 +1 @@ +*0.500000* |