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

Side by Side Diff: src/ia32/code-stubs-ia32.h

Issue 275433004: Require SSE2 support for the ia32 port. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 7 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
« no previous file with comments | « src/ia32/builtins-ia32.cc ('k') | src/ia32/code-stubs-ia32.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2011 the V8 project authors. All rights reserved. 1 // Copyright 2011 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 #ifndef V8_IA32_CODE_STUBS_IA32_H_ 5 #ifndef V8_IA32_CODE_STUBS_IA32_H_
6 #define V8_IA32_CODE_STUBS_IA32_H_ 6 #define V8_IA32_CODE_STUBS_IA32_H_
7 7
8 #include "macro-assembler.h" 8 #include "macro-assembler.h"
9 #include "ic-inl.h" 9 #include "ic-inl.h"
10 10
11 namespace v8 { 11 namespace v8 {
12 namespace internal { 12 namespace internal {
13 13
14 14
15 void ArrayNativeCode(MacroAssembler* masm, 15 void ArrayNativeCode(MacroAssembler* masm,
16 bool construct_call, 16 bool construct_call,
17 Label* call_generic_code); 17 Label* call_generic_code);
18 18
19 19
20 class StoreBufferOverflowStub: public PlatformCodeStub { 20 class StoreBufferOverflowStub: public PlatformCodeStub {
21 public: 21 public:
22 StoreBufferOverflowStub(Isolate* isolate, SaveFPRegsMode save_fp) 22 StoreBufferOverflowStub(Isolate* isolate, SaveFPRegsMode save_fp)
23 : PlatformCodeStub(isolate), save_doubles_(save_fp) { 23 : PlatformCodeStub(isolate), save_doubles_(save_fp) { }
24 ASSERT(CpuFeatures::IsSafeForSnapshot(isolate, SSE2) ||
25 save_fp == kDontSaveFPRegs);
26 }
27 24
28 void Generate(MacroAssembler* masm); 25 void Generate(MacroAssembler* masm);
29 26
30 static void GenerateFixedRegStubsAheadOfTime(Isolate* isolate); 27 static void GenerateFixedRegStubsAheadOfTime(Isolate* isolate);
31 virtual bool SometimesSetsUpAFrame() { return false; } 28 virtual bool SometimesSetsUpAFrame() { return false; }
32 29
33 private: 30 private:
34 SaveFPRegsMode save_doubles_; 31 SaveFPRegsMode save_doubles_;
35 32
36 Major MajorKey() { return StoreBufferOverflow; } 33 Major MajorKey() { return StoreBufferOverflow; }
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
190 SaveFPRegsMode fp_mode) 187 SaveFPRegsMode fp_mode)
191 : PlatformCodeStub(isolate), 188 : PlatformCodeStub(isolate),
192 object_(object), 189 object_(object),
193 value_(value), 190 value_(value),
194 address_(address), 191 address_(address),
195 remembered_set_action_(remembered_set_action), 192 remembered_set_action_(remembered_set_action),
196 save_fp_regs_mode_(fp_mode), 193 save_fp_regs_mode_(fp_mode),
197 regs_(object, // An input reg. 194 regs_(object, // An input reg.
198 address, // An input reg. 195 address, // An input reg.
199 value) { // One scratch reg. 196 value) { // One scratch reg.
200 ASSERT(CpuFeatures::IsSafeForSnapshot(isolate, SSE2) ||
201 fp_mode == kDontSaveFPRegs);
202 } 197 }
203 198
204 enum Mode { 199 enum Mode {
205 STORE_BUFFER_ONLY, 200 STORE_BUFFER_ONLY,
206 INCREMENTAL, 201 INCREMENTAL,
207 INCREMENTAL_COMPACTION 202 INCREMENTAL_COMPACTION
208 }; 203 };
209 204
210 virtual bool SometimesSetsUpAFrame() { return false; } 205 virtual bool SometimesSetsUpAFrame() { return false; }
211 206
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
333 } 328 }
334 329
335 // If we have to call into C then we need to save and restore all caller- 330 // If we have to call into C then we need to save and restore all caller-
336 // saved registers that were not already preserved. The caller saved 331 // saved registers that were not already preserved. The caller saved
337 // registers are eax, ecx and edx. The three scratch registers (incl. ecx) 332 // registers are eax, ecx and edx. The three scratch registers (incl. ecx)
338 // will be restored by other means so we don't bother pushing them here. 333 // will be restored by other means so we don't bother pushing them here.
339 void SaveCallerSaveRegisters(MacroAssembler* masm, SaveFPRegsMode mode) { 334 void SaveCallerSaveRegisters(MacroAssembler* masm, SaveFPRegsMode mode) {
340 if (!scratch0_.is(eax) && !scratch1_.is(eax)) masm->push(eax); 335 if (!scratch0_.is(eax) && !scratch1_.is(eax)) masm->push(eax);
341 if (!scratch0_.is(edx) && !scratch1_.is(edx)) masm->push(edx); 336 if (!scratch0_.is(edx) && !scratch1_.is(edx)) masm->push(edx);
342 if (mode == kSaveFPRegs) { 337 if (mode == kSaveFPRegs) {
343 CpuFeatureScope scope(masm, SSE2);
344 masm->sub(esp, 338 masm->sub(esp,
345 Immediate(kDoubleSize * (XMMRegister::kNumRegisters - 1))); 339 Immediate(kDoubleSize * (XMMRegister::kNumRegisters - 1)));
346 // Save all XMM registers except XMM0. 340 // Save all XMM registers except XMM0.
347 for (int i = XMMRegister::kNumRegisters - 1; i > 0; i--) { 341 for (int i = XMMRegister::kNumRegisters - 1; i > 0; i--) {
348 XMMRegister reg = XMMRegister::from_code(i); 342 XMMRegister reg = XMMRegister::from_code(i);
349 masm->movsd(Operand(esp, (i - 1) * kDoubleSize), reg); 343 masm->movsd(Operand(esp, (i - 1) * kDoubleSize), reg);
350 } 344 }
351 } 345 }
352 } 346 }
353 347
354 inline void RestoreCallerSaveRegisters(MacroAssembler*masm, 348 inline void RestoreCallerSaveRegisters(MacroAssembler*masm,
355 SaveFPRegsMode mode) { 349 SaveFPRegsMode mode) {
356 if (mode == kSaveFPRegs) { 350 if (mode == kSaveFPRegs) {
357 CpuFeatureScope scope(masm, SSE2);
358 // Restore all XMM registers except XMM0. 351 // Restore all XMM registers except XMM0.
359 for (int i = XMMRegister::kNumRegisters - 1; i > 0; i--) { 352 for (int i = XMMRegister::kNumRegisters - 1; i > 0; i--) {
360 XMMRegister reg = XMMRegister::from_code(i); 353 XMMRegister reg = XMMRegister::from_code(i);
361 masm->movsd(reg, Operand(esp, (i - 1) * kDoubleSize)); 354 masm->movsd(reg, Operand(esp, (i - 1) * kDoubleSize));
362 } 355 }
363 masm->add(esp, 356 masm->add(esp,
364 Immediate(kDoubleSize * (XMMRegister::kNumRegisters - 1))); 357 Immediate(kDoubleSize * (XMMRegister::kNumRegisters - 1)));
365 } 358 }
366 if (!scratch0_.is(edx) && !scratch1_.is(edx)) masm->pop(edx); 359 if (!scratch0_.is(edx) && !scratch1_.is(edx)) masm->pop(edx);
367 if (!scratch0_.is(eax) && !scratch1_.is(eax)) masm->pop(eax); 360 if (!scratch0_.is(eax) && !scratch1_.is(eax)) masm->pop(eax);
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
437 Register address_; 430 Register address_;
438 RememberedSetAction remembered_set_action_; 431 RememberedSetAction remembered_set_action_;
439 SaveFPRegsMode save_fp_regs_mode_; 432 SaveFPRegsMode save_fp_regs_mode_;
440 RegisterAllocation regs_; 433 RegisterAllocation regs_;
441 }; 434 };
442 435
443 436
444 } } // namespace v8::internal 437 } } // namespace v8::internal
445 438
446 #endif // V8_IA32_CODE_STUBS_IA32_H_ 439 #endif // V8_IA32_CODE_STUBS_IA32_H_
OLDNEW
« no previous file with comments | « src/ia32/builtins-ia32.cc ('k') | src/ia32/code-stubs-ia32.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698