1d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org// Copyright 2012 the V8 project authors. All rights reserved. 2d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org// Redistribution and use in source and binary forms, with or without 3d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org// modification, are permitted provided that the following conditions are 4d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org// met: 5d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org// 6d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org// * Redistributions of source code must retain the above copyright 7d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org// notice, this list of conditions and the following disclaimer. 8d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org// * Redistributions in binary form must reproduce the above 9d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org// copyright notice, this list of conditions and the following 10d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org// disclaimer in the documentation and/or other materials provided 11d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org// with the distribution. 12d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org// * Neither the name of Google Inc. nor the names of its 13d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org// contributors may be used to endorse or promote products derived 14d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org// from this software without specific prior written permission. 15d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org// 16d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 17d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 18d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 19d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 20d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 21d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 22d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 26d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org 28d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org// Flags: --allow-natives-syntax 29d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org 30d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org// Test CompareIC stubs for normal and strict equality comparison of known 31d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org// objects in hydrogen. 32d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org 33d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.orgfunction lt(a, b) { 34d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org return a < b; 35d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org} 36d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org 37d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.orgfunction gt(a, b) { 38d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org return a > b; 39d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org} 40d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org 41d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.orgfunction eq(a, b) { 42d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org return a == b; 43d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org} 44d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org 45d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.orgfunction eq_strict(a, b) { 46d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org return a === b; 47d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org} 48d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org 49d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.orgfunction test(a, b, less, greater) { 50d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org // Check CompareIC for equality of known objects. 51d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org assertTrue(eq(a, a)); 52d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org assertTrue(eq(b, b)); 53d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org assertFalse(eq(a, b)); 54d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org assertTrue(eq_strict(a, a)); 55d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org assertTrue(eq_strict(b, b)); 56d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org assertFalse(eq_strict(a, b)); 57d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org assertEquals(lt(a, b), less); 58d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org assertEquals(gt(a, b), greater); 59d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org assertEquals(lt(b, a), greater); 60d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org assertEquals(gt(b, a), less); 61d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org} 62d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org 63d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.orgvar obj1 = {toString: function() {return "1";}}; 64d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.orgvar obj2 = {toString: function() {return "2";}}; 65d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org 66d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.orgvar less = obj1 < obj2; 67d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.orgvar greater = obj1 > obj2; 68d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org 69d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.orgtest(obj1, obj2, less, greater); 70d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.orgtest(obj1, obj2, less, greater); 71d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.orgtest(obj1, obj2, less, greater); 72d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org%OptimizeFunctionOnNextCall(test); 73d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.orgtest(obj1, obj2, less, greater); 74d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.orgtest(obj1, obj2, less, greater); 75d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org 76d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.orgobj1.x = 1; 77d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.orgtest(obj1, obj2, less, greater); 78d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org 79d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.orgobj2.y = 2; 80d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.orgtest(obj1, obj2, less, greater); 81d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org 82d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.orgvar obj1 = {test: 3}; 83d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.orgvar obj2 = {test2: 3}; 84d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org 85d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.orgvar less = obj1 < obj2; 86d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.orgvar greater = obj1 > obj2; 87d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org 88d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.orgtest(obj1, obj2, less, greater); 89d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.orgtest(obj1, obj2, less, greater); 90d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.orgtest(obj1, obj2, less, greater); 91d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org%OptimizeFunctionOnNextCall(test); 92d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.orgtest(obj1, obj2, less, greater); 93d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.orgtest(obj1, obj2, less, greater); 94d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org 95d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.orgobj1.toString = function() {return "1"}; 96d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.orgvar less = obj1 < obj2; 97d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.orgvar greater = obj1 > obj2; 98d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.orgtest(obj1, obj2, less, greater); 99d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org%OptimizeFunctionOnNextCall(test); 100d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.orgtest(obj1, obj2, less, greater); 101d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org 102d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.orgobj2.toString = function() {return "2"}; 103d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.orgvar less = true; 104d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.orgvar greater = false; 105d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org 106d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.orgtest(obj1, obj2, less, greater); 107d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.orgobj2.y = 2; 108d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.orgtest(obj1, obj2, less, greater); 109