Home | History | Annotate | Download | only in asm
      1 // Copyright 2014 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 var stdlib = {};
      6 var foreign = {};
      7 var heap = new ArrayBuffer(64 * 1024);
      8 
      9 function Word32And(rhs) {
     10   var name = "and_0x" + Number(rhs).toString(16);
     11   var m = eval("function Module(stdlib, foreign, heap) {\n"
     12       + " \"use asm\";\n"
     13       + " function " + name + "(lhs) {\n"
     14       + "  return (lhs | 0) & 0x" + Number(rhs).toString(16) + ";\n"
     15       + " }\n"
     16       + " return { f: " + name + "}\n"
     17       + "}; Module");
     18   return m(stdlib, foreign, heap).f;
     19 }
     20 
     21 var masks = [0xffffffff, 0xf0f0f0f0, 0x80ffffff, 0x07f77f0f, 0xdeadbeef,
     22              0x0fffff00, 0x0ff0, 0xff, 0x00];
     23 for (var i in masks) {
     24   var rhs = masks[i];
     25   var and = Word32And(rhs);
     26   for (var lhs = -2147483648; lhs < 2147483648; lhs += 3999773) {
     27     assertEquals(lhs & rhs, and(lhs));
     28   }
     29 }
     30