Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(558)

Side by Side Diff: src/harmony-atomics.js

Issue 1398733002: Move builtin JavaScript sources into own directory. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Also move macros.py file. Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/harmony-array-includes.js ('k') | src/harmony-concat-spreadable.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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 (function(global, utils) {
6
7 "use strict";
8
9 %CheckIsBootstrapping();
10
11 // -------------------------------------------------------------------
12 // Imports
13
14 var GlobalObject = global.Object;
15 var MathMax;
16 var toStringTagSymbol = utils.ImportNow("to_string_tag_symbol");
17
18 utils.Import(function(from) {
19 MathMax = from.MathMax;
20 });
21
22 // -------------------------------------------------------------------
23
24
25 function CheckSharedIntegerTypedArray(ia) {
26 if (!%IsSharedIntegerTypedArray(ia)) {
27 throw MakeTypeError(kNotIntegerSharedTypedArray, ia);
28 }
29 }
30
31 function CheckSharedInteger32TypedArray(ia) {
32 CheckSharedIntegerTypedArray(ia);
33 if (%_ClassOf(ia) !== 'Int32Array') {
34 throw MakeTypeError(kNotInt32SharedTypedArray, ia);
35 }
36 }
37
38 //-------------------------------------------------------------------
39
40 function AtomicsCompareExchangeJS(sta, index, oldValue, newValue) {
41 CheckSharedIntegerTypedArray(sta);
42 index = TO_INTEGER(index);
43 if (index < 0 || index >= %_TypedArrayGetLength(sta)) {
44 return UNDEFINED;
45 }
46 oldValue = TO_NUMBER(oldValue);
47 newValue = TO_NUMBER(newValue);
48 return %_AtomicsCompareExchange(sta, index, oldValue, newValue);
49 }
50
51 function AtomicsLoadJS(sta, index) {
52 CheckSharedIntegerTypedArray(sta);
53 index = TO_INTEGER(index);
54 if (index < 0 || index >= %_TypedArrayGetLength(sta)) {
55 return UNDEFINED;
56 }
57 return %_AtomicsLoad(sta, index);
58 }
59
60 function AtomicsStoreJS(sta, index, value) {
61 CheckSharedIntegerTypedArray(sta);
62 index = TO_INTEGER(index);
63 if (index < 0 || index >= %_TypedArrayGetLength(sta)) {
64 return UNDEFINED;
65 }
66 value = TO_NUMBER(value);
67 return %_AtomicsStore(sta, index, value);
68 }
69
70 function AtomicsAddJS(ia, index, value) {
71 CheckSharedIntegerTypedArray(ia);
72 index = TO_INTEGER(index);
73 if (index < 0 || index >= %_TypedArrayGetLength(ia)) {
74 return UNDEFINED;
75 }
76 value = TO_NUMBER(value);
77 return %_AtomicsAdd(ia, index, value);
78 }
79
80 function AtomicsSubJS(ia, index, value) {
81 CheckSharedIntegerTypedArray(ia);
82 index = TO_INTEGER(index);
83 if (index < 0 || index >= %_TypedArrayGetLength(ia)) {
84 return UNDEFINED;
85 }
86 value = TO_NUMBER(value);
87 return %_AtomicsSub(ia, index, value);
88 }
89
90 function AtomicsAndJS(ia, index, value) {
91 CheckSharedIntegerTypedArray(ia);
92 index = TO_INTEGER(index);
93 if (index < 0 || index >= %_TypedArrayGetLength(ia)) {
94 return UNDEFINED;
95 }
96 value = TO_NUMBER(value);
97 return %_AtomicsAnd(ia, index, value);
98 }
99
100 function AtomicsOrJS(ia, index, value) {
101 CheckSharedIntegerTypedArray(ia);
102 index = TO_INTEGER(index);
103 if (index < 0 || index >= %_TypedArrayGetLength(ia)) {
104 return UNDEFINED;
105 }
106 value = TO_NUMBER(value);
107 return %_AtomicsOr(ia, index, value);
108 }
109
110 function AtomicsXorJS(ia, index, value) {
111 CheckSharedIntegerTypedArray(ia);
112 index = TO_INTEGER(index);
113 if (index < 0 || index >= %_TypedArrayGetLength(ia)) {
114 return UNDEFINED;
115 }
116 value = TO_NUMBER(value);
117 return %_AtomicsXor(ia, index, value);
118 }
119
120 function AtomicsExchangeJS(ia, index, value) {
121 CheckSharedIntegerTypedArray(ia);
122 index = TO_INTEGER(index);
123 if (index < 0 || index >= %_TypedArrayGetLength(ia)) {
124 return UNDEFINED;
125 }
126 value = TO_NUMBER(value);
127 return %_AtomicsExchange(ia, index, value);
128 }
129
130 function AtomicsIsLockFreeJS(size) {
131 return %_AtomicsIsLockFree(size);
132 }
133
134 // Futexes
135
136 function AtomicsFutexWaitJS(ia, index, value, timeout) {
137 CheckSharedInteger32TypedArray(ia);
138 index = TO_INTEGER(index);
139 if (index < 0 || index >= %_TypedArrayGetLength(ia)) {
140 return UNDEFINED;
141 }
142 if (IS_UNDEFINED(timeout)) {
143 timeout = INFINITY;
144 } else {
145 timeout = TO_NUMBER(timeout);
146 if (NUMBER_IS_NAN(timeout)) {
147 timeout = INFINITY;
148 } else {
149 timeout = MathMax(0, timeout);
150 }
151 }
152 return %AtomicsFutexWait(ia, index, value, timeout);
153 }
154
155 function AtomicsFutexWakeJS(ia, index, count) {
156 CheckSharedInteger32TypedArray(ia);
157 index = TO_INTEGER(index);
158 if (index < 0 || index >= %_TypedArrayGetLength(ia)) {
159 return UNDEFINED;
160 }
161 count = MathMax(0, TO_INTEGER(count));
162 return %AtomicsFutexWake(ia, index, count);
163 }
164
165 function AtomicsFutexWakeOrRequeueJS(ia, index1, count, value, index2) {
166 CheckSharedInteger32TypedArray(ia);
167 index1 = TO_INTEGER(index1);
168 count = MathMax(0, TO_INTEGER(count));
169 value = TO_INT32(value);
170 index2 = TO_INTEGER(index2);
171 if (index1 < 0 || index1 >= %_TypedArrayGetLength(ia) ||
172 index2 < 0 || index2 >= %_TypedArrayGetLength(ia)) {
173 return UNDEFINED;
174 }
175 return %AtomicsFutexWakeOrRequeue(ia, index1, count, value, index2);
176 }
177
178 // -------------------------------------------------------------------
179
180 function AtomicsConstructor() {}
181
182 var Atomics = new AtomicsConstructor();
183
184 %InternalSetPrototype(Atomics, GlobalObject.prototype);
185 %AddNamedProperty(global, "Atomics", Atomics, DONT_ENUM);
186 %FunctionSetInstanceClassName(AtomicsConstructor, 'Atomics');
187
188 %AddNamedProperty(Atomics, toStringTagSymbol, "Atomics", READ_ONLY | DONT_ENUM);
189
190 // These must match the values in src/futex-emulation.h
191 utils.InstallConstants(Atomics, [
192 "OK", 0,
193 "NOTEQUAL", -1,
194 "TIMEDOUT", -2,
195 ]);
196
197 utils.InstallFunctions(Atomics, DONT_ENUM, [
198 "compareExchange", AtomicsCompareExchangeJS,
199 "load", AtomicsLoadJS,
200 "store", AtomicsStoreJS,
201 "add", AtomicsAddJS,
202 "sub", AtomicsSubJS,
203 "and", AtomicsAndJS,
204 "or", AtomicsOrJS,
205 "xor", AtomicsXorJS,
206 "exchange", AtomicsExchangeJS,
207 "isLockFree", AtomicsIsLockFreeJS,
208 "futexWait", AtomicsFutexWaitJS,
209 "futexWake", AtomicsFutexWakeJS,
210 "futexWakeOrRequeue", AtomicsFutexWakeOrRequeueJS,
211 ]);
212
213 })
OLDNEW
« no previous file with comments | « src/harmony-array-includes.js ('k') | src/harmony-concat-spreadable.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698