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

Side by Side Diff: src/compiler/machine-operator.cc

Issue 668173002: Add Float64Round operator. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Remove comma at end of enumerator list. Created 6 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2014 the V8 project authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/compiler/machine-operator.h" 5 #include "src/compiler/machine-operator.h"
6 6
7 #include "src/base/lazy-instance.h" 7 #include "src/base/lazy-instance.h"
8 #include "src/compiler/opcodes.h" 8 #include "src/compiler/opcodes.h"
9 #include "src/compiler/operator.h" 9 #include "src/compiler/operator.h"
10 10
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
174 }; \ 174 }; \
175 struct Store##Type##FullWriteBarrier##Operator FINAL \ 175 struct Store##Type##FullWriteBarrier##Operator FINAL \
176 : public Store##Type##Operator { \ 176 : public Store##Type##Operator { \
177 Store##Type##FullWriteBarrier##Operator() \ 177 Store##Type##FullWriteBarrier##Operator() \
178 : Store##Type##Operator(kFullWriteBarrier) {} \ 178 : Store##Type##Operator(kFullWriteBarrier) {} \
179 }; \ 179 }; \
180 Store##Type##NoWriteBarrier##Operator k##Store##Type##NoWriteBarrier; \ 180 Store##Type##NoWriteBarrier##Operator k##Store##Type##NoWriteBarrier; \
181 Store##Type##FullWriteBarrier##Operator k##Store##Type##FullWriteBarrier; 181 Store##Type##FullWriteBarrier##Operator k##Store##Type##FullWriteBarrier;
182 MACHINE_TYPE_LIST(STORE) 182 MACHINE_TYPE_LIST(STORE)
183 #undef STORE 183 #undef STORE
184
185 struct Float64RoundOperator FINAL : public Operator1<Float64RoundMode> {
186 explicit Float64RoundOperator(Float64RoundMode mode)
187 : Operator1(IrOpcode::kFloat64Round, Operator::kPure, 1, 1,
188 "Float64Round", mode) {}
189 };
190 Float64RoundOperator kFloat64RoundDown;
191 Float64RoundOperator kFloat64RoundUp;
192 Float64RoundOperator kFloat64RoundAway;
193 Float64RoundOperator kFloat64RoundTowards;
194
195 MachineOperatorBuilderImpl()
196 : kFloat64RoundDown(kRoundDown),
197 kFloat64RoundUp(kRoundUp),
198 kFloat64RoundAway(kRoundAway),
199 kFloat64RoundTowards(kRoundTowards) {}
184 }; 200 };
185 201
186 202
187 static base::LazyInstance<MachineOperatorBuilderImpl>::type kImpl = 203 static base::LazyInstance<MachineOperatorBuilderImpl>::type kImpl =
188 LAZY_INSTANCE_INITIALIZER; 204 LAZY_INSTANCE_INITIALIZER;
189 205
190 206
191 MachineOperatorBuilder::MachineOperatorBuilder(MachineType word) 207 MachineOperatorBuilder::MachineOperatorBuilder(
192 : impl_(kImpl.Get()), word_(word) { 208 MachineType word, SupportedOperators supportedOperators)
209 : impl_(kImpl.Get()), word_(word), supportedOperators_(supportedOperators) {
193 DCHECK(word == kRepWord32 || word == kRepWord64); 210 DCHECK(word == kRepWord32 || word == kRepWord64);
194 } 211 }
195 212
196 213
197 #define PURE(Name, properties, input_count, output_count) \ 214 #define PURE(Name, properties, input_count, output_count) \
198 const Operator* MachineOperatorBuilder::Name() { return &impl_.k##Name; } 215 const Operator* MachineOperatorBuilder::Name() { return &impl_.k##Name; }
199 PURE_OP_LIST(PURE) 216 PURE_OP_LIST(PURE)
200 #undef PURE 217 #undef PURE
201 218
202 219
(...skipping 27 matching lines...) Expand all
230 MACHINE_TYPE_LIST(STORE) 247 MACHINE_TYPE_LIST(STORE)
231 #undef STORE 248 #undef STORE
232 249
233 default: 250 default:
234 break; 251 break;
235 } 252 }
236 UNREACHABLE(); 253 UNREACHABLE();
237 return NULL; 254 return NULL;
238 } 255 }
239 256
257
258 const Operator* MachineOperatorBuilder::Float64Round(Float64RoundMode mode) {
259 switch (mode) {
260 case kRoundDown:
261 DCHECK(HasFloat64Floor());
262 return &impl_.kFloat64RoundDown;
263 case kRoundUp:
264 DCHECK(HasFloat64Ceil());
265 return &impl_.kFloat64RoundUp;
266 case kRoundAway:
267 DCHECK(HasFloat64RoundTiesAway());
268 return &impl_.kFloat64RoundAway;
269 case kRoundTowards:
270 DCHECK(HasFloat64RoundTiesTowards());
271 return &impl_.kFloat64RoundTowards;
272 }
273 UNREACHABLE();
274 return NULL;
275 }
240 } // namespace compiler 276 } // namespace compiler
241 } // namespace internal 277 } // namespace internal
242 } // namespace v8 278 } // namespace v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698