Home | History | Annotate | Download | only in wasm
      1 // Copyright 2015 the V8 project authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 // Flags: --expose-wasm
      6 
      7 load("test/mjsunit/wasm/wasm-constants.js");
      8 load("test/mjsunit/wasm/wasm-module-builder.js");
      9 
     10 function runSelect2(select, which, a, b) {
     11   assertEquals(which == 0 ? a : b, select(a, b));
     12 }
     13 
     14 function testSelect2(type) {
     15   for (var which = 0; which < 2; which++) {
     16     print("type = " + type + ", which = " + which);
     17 
     18     var builder = new WasmModuleBuilder();
     19 
     20     builder.addFunction("select", makeSig_r_xx(type, type))
     21       .addBody([kExprGetLocal, which])
     22       .exportFunc()
     23 
     24     var select = builder.instantiate().exports.select;
     25 
     26     runSelect2(select, which, 99, 97);
     27     runSelect2(select, which, -99, -97);
     28 
     29     if (type != kAstF32) {
     30       runSelect2(select, which, 0x80000000 | 0, 0x7fffffff | 0);
     31       runSelect2(select, which, 0x80000001 | 0, 0x7ffffffe | 0);
     32       runSelect2(select, which, 0xffffffff | 0, 0xfffffffe | 0);
     33       runSelect2(select, which, -2147483647, 2147483646);
     34       runSelect2(select, which, -2147483646, 2147483645);
     35       runSelect2(select, which, -2147483648, 2147483647);
     36     }
     37 
     38     if (type != kAstI32 && type != kAstI64) {
     39       runSelect2(select, which, -1.25, 5.25);
     40       runSelect2(select, which, Infinity, -Infinity);
     41     }
     42   }
     43 }
     44 
     45 
     46 testSelect2(kAstI32);
     47 testSelect2(kAstF32);
     48 testSelect2(kAstF64);
     49 
     50 
     51 function runSelect10(select, which, a, b) {
     52   var x = -1;
     53 
     54   var result = [
     55     select(a, b, x, x, x, x, x, x, x, x),
     56     select(x, a, b, x, x, x, x, x, x, x),
     57     select(x, x, a, b, x, x, x, x, x, x),
     58     select(x, x, x, a, b, x, x, x, x, x),
     59     select(x, x, x, x, a, b, x, x, x, x),
     60     select(x, x, x, x, x, a, b, x, x, x),
     61     select(x, x, x, x, x, x, a, b, x, x),
     62     select(x, x, x, x, x, x, x, a, b, x),
     63     select(x, x, x, x, x, x, x, x, a, b),
     64     select(x, x, x, x, x, x, x, x, x, a)
     65   ];
     66 
     67   for (var i = 0; i < 10; i++) {
     68      if (which == i) assertEquals(a, result[i]);
     69      else if (which == i+1) assertEquals(b, result[i]);
     70      else assertEquals(x, result[i]);
     71   }
     72 }
     73 
     74 function testSelect10(t) {
     75   var kBodySize = 2;
     76   var kNameOffset = kHeaderSize + 29 + kBodySize + 1;
     77 
     78   for (var which = 0; which < 10; which++) {
     79     print("type = " + t + ", which = " + which);
     80 
     81     var builder = new WasmModuleBuilder();
     82     builder.addFunction("select", makeSig([t,t,t,t,t,t,t,t,t,t], [t]))
     83       .addBody([kExprGetLocal, which])
     84       .exportFunc();
     85 
     86     var select = builder.instantiate().exports.select;
     87 
     88     assertEquals("function", typeof select);
     89     runSelect10(select, which, 99, 97);
     90     runSelect10(select, which, -99, -97);
     91 
     92     if (t != kAstF32) {
     93       runSelect10(select, which, 0x80000000 | 0, 0x7fffffff | 0);
     94       runSelect10(select, which, 0x80000001 | 0, 0x7ffffffe | 0);
     95       runSelect10(select, which, 0xffffffff | 0, 0xfffffffe | 0);
     96       runSelect10(select, which, -2147483647, 2147483646);
     97       runSelect10(select, which, -2147483646, 2147483645);
     98       runSelect10(select, which, -2147483648, 2147483647);
     99     }
    100 
    101     if (t != kAstI32 && t != kAstI64) {
    102       runSelect10(select, which, -1.25, 5.25);
    103       runSelect10(select, which, Infinity, -Infinity);
    104     }
    105   }
    106 }
    107 
    108 
    109 testSelect10(kAstI32);
    110 testSelect10(kAstF32);
    111 testSelect10(kAstF64);
    112