| Index: test/mjsunit/harmony/atomics.js | 
| diff --git a/test/mjsunit/harmony/atomics.js b/test/mjsunit/harmony/atomics.js | 
| index bf27eb46d54f3f3420e3a75f8eac3a81aebdb7ed..8973921ad57900f1b19dfaf973e28615080be8ed 100644 | 
| --- a/test/mjsunit/harmony/atomics.js | 
| +++ b/test/mjsunit/harmony/atomics.js | 
| @@ -16,26 +16,19 @@ function toRangeWrapped(value) { | 
| return value; | 
| } | 
|  | 
| -function toRangeClamped(value) { | 
| -  if (value < this.min) return this.min; | 
| -  if (value > this.max) return this.max; | 
| -  return value; | 
| -} | 
| - | 
| function makeConstructorObject(constr, min, max, toRange) { | 
| var o = {constr: constr, min: min, max: max}; | 
| -  o.toRange = toRange.bind(o); | 
| +  o.toRange = toRangeWrapped.bind(o); | 
| return o; | 
| } | 
|  | 
| var IntegerTypedArrayConstructors = [ | 
| -  makeConstructorObject(Int8Array, -128, 127, toRangeWrapped), | 
| -  makeConstructorObject(Int16Array, -32768, 32767, toRangeWrapped), | 
| -  makeConstructorObject(Int32Array, -0x80000000, 0x7fffffff, toRangeWrapped), | 
| -  makeConstructorObject(Uint8Array, 0, 255, toRangeWrapped), | 
| -  makeConstructorObject(Uint8ClampedArray, 0, 255, toRangeClamped), | 
| -  makeConstructorObject(Uint16Array, 0, 65535, toRangeWrapped), | 
| -  makeConstructorObject(Uint32Array, 0, 0xffffffff, toRangeWrapped), | 
| +  makeConstructorObject(Int8Array, -128, 127), | 
| +  makeConstructorObject(Int16Array, -32768, 32767), | 
| +  makeConstructorObject(Int32Array, -0x80000000, 0x7fffffff), | 
| +  makeConstructorObject(Uint8Array, 0, 255), | 
| +  makeConstructorObject(Uint16Array, 0, 65535), | 
| +  makeConstructorObject(Uint32Array, 0, 0xffffffff), | 
| ]; | 
|  | 
| (function TestBadArray() { | 
| @@ -44,9 +37,13 @@ var IntegerTypedArrayConstructors = [ | 
| var sab = new SharedArrayBuffer(128); | 
| var sf32a = new Float32Array(sab); | 
| var sf64a = new Float64Array(sab); | 
| +  var u8ca = new Uint8ClampedArray(sab); | 
|  | 
| // Atomic ops required integer shared typed arrays | 
| -  [undefined, 1, 'hi', 3.4, ab, u32a, sab, sf32a, sf64a].forEach(function(o) { | 
| +  var badArrayTypes = [ | 
| +    undefined, 1, 'hi', 3.4, ab, u32a, sab, sf32a, sf64a, u8ca | 
| +  ]; | 
| +  badArrayTypes.forEach(function(o) { | 
| assertThrows(function() { Atomics.compareExchange(o, 0, 0, 0); }, | 
| TypeError); | 
| assertThrows(function() { Atomics.load(o, 0); }, TypeError); | 
| @@ -129,15 +126,16 @@ var IntegerTypedArrayConstructors = [ | 
|  | 
| var testOp = function(op, ia, index, expectedIndex, name) { | 
| for (var i = 0; i < ia.length; ++i) | 
| -      ia[i] = 22; | 
| +      ia[i] = i * 2; | 
|  | 
| ia[expectedIndex] = 0; | 
| -    assertEquals(0, op(ia, index, 0, 0), name); | 
| +    var result = op(ia, index, 0, 0); | 
| +    assertEquals(0, result, name); | 
| assertEquals(0, ia[expectedIndex], name); | 
|  | 
| for (var i = 0; i < ia.length; ++i) { | 
| if (i == expectedIndex) continue; | 
| -      assertEquals(22, ia[i], name); | 
| +      assertEquals(i * 2, ia[i], name); | 
| } | 
| }; | 
|  | 
| @@ -222,6 +220,24 @@ function clearArray(sab) { | 
| } | 
| }) | 
| }); | 
| + | 
| +  // Test Smi range | 
| +  (function () { | 
| +    var sab = new SharedArrayBuffer(4); | 
| +    var i32 = new Int32Array(sab); | 
| +    var u32 = new Uint32Array(sab); | 
| + | 
| +    function testLoad(signedValue, unsignedValue) { | 
| +      u32[0] = unsignedValue; | 
| +      assertEquals(unsignedValue, Atomics.load(u32, 0)); | 
| +      assertEquals(signedValue, Atomics.load(i32, 0)); | 
| +    } | 
| + | 
| +    testLoad(0x3fffffff,  0x3fffffff); // 2**30-1 (always smi) | 
| +    testLoad(0x40000000,  0x40000000); // 2**30 (smi if signed and 32-bits) | 
| +    testLoad(0x80000000, -0x80000000); // 2**31 (smi if signed and 32-bits) | 
| +    testLoad(0xffffffff, -1);          // 2**31 (smi if signed) | 
| +  }); | 
| })(); | 
|  | 
| (function TestStore() { | 
|  |