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

Side by Side Diff: src/x64/lithium-codegen-x64.cc

Issue 6326003: X64 Crnakshaft: Added GeneratePrologue implementation. (Closed)
Patch Set: Now compiles. Created 9 years, 11 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/v8globals.h ('k') | src/x64/lithium-x64.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 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
84 // Copy the string before recording it in the assembler to avoid 84 // Copy the string before recording it in the assembler to avoid
85 // issues when the stack allocated buffer goes out of scope. 85 // issues when the stack allocated buffer goes out of scope.
86 size_t length = builder.position(); 86 size_t length = builder.position();
87 Vector<char> copy = Vector<char>::New(length + 1); 87 Vector<char> copy = Vector<char>::New(length + 1);
88 memcpy(copy.start(), builder.Finalize(), copy.length()); 88 memcpy(copy.start(), builder.Finalize(), copy.length());
89 masm()->RecordComment(copy.start()); 89 masm()->RecordComment(copy.start());
90 } 90 }
91 91
92 92
93 bool LCodeGen::GeneratePrologue() { 93 bool LCodeGen::GeneratePrologue() {
94 Abort("Unimplemented: %s", "GeneratePrologue"); 94 ASSERT(is_generating());
95 return false; 95
96 #ifdef DEBUG
97 if (strlen(FLAG_stop_at) > 0 &&
98 info_->function()->name()->IsEqualTo(CStrVector(FLAG_stop_at))) {
99 __ int3();
100 }
101 #endif
102
103 __ push(rbp); // Caller's frame pointer.
104 __ movq(rbp, rsp);
105 __ push(rsi); // Callee's context.
106 __ push(rdi); // Callee's JS function.
107
108 // Reserve space for the stack slots needed by the code.
109 int slots = StackSlotCount();
110 if (slots > 0) {
111 if (FLAG_debug_code) {
112 __ movl(rax, Immediate(slots));
113 __ movq(kScratchRegister, kSlotsZapValue, RelocInfo::NONE);
114 Label loop;
115 __ bind(&loop);
116 __ push(kScratchRegister);
117 __ decl(rax);
118 __ j(not_zero, &loop);
119 } else {
120 __ subq(rsp, Immediate(slots * kPointerSize));
121 #ifdef _MSC_VER
Rico 2011/01/14 12:57:02 We might need to do this on ia32 as well?
Lasse Reichstein 2011/01/14 13:12:30 Will do it there as well.
122 // On windows, you may not access the stack more than one page below
123 // the most recently mapped page. To make the allocated area randomly
124 // accessible, we write to each page in turn (the value is irrelevant).
125 for (int offset = slots * kPointerSize - 4 * KB;
Rico 2011/01/14 12:57:02 Do we have a kPageSize constant somewhere?
Lasse Reichstein 2011/01/14 13:12:30 Sadly not, but I'll define a local constant. It's
126 offset > 0;
127 offset -= 4 * KB) {
128 __ moveq(Operand(rsp, offset), rax);
129 }
130 #endif
131 }
132 }
133
134 // Trace the call.
135 if (FLAG_trace) {
136 __ CallRuntime(Runtime::kTraceEnter, 0);
137 }
138 return !is_aborted();
96 } 139 }
97 140
98 141
99 bool LCodeGen::GenerateBody() { 142 bool LCodeGen::GenerateBody() {
100 ASSERT(is_generating()); 143 ASSERT(is_generating());
101 bool emit_instructions = true; 144 bool emit_instructions = true;
102 for (current_instruction_ = 0; 145 for (current_instruction_ = 0;
103 !is_aborted() && current_instruction_ < instructions_->length(); 146 !is_aborted() && current_instruction_ < instructions_->length();
104 current_instruction_++) { 147 current_instruction_++) {
105 LInstruction* instr = instructions_->at(current_instruction_); 148 LInstruction* instr = instructions_->at(current_instruction_);
(...skipping 1061 matching lines...) Expand 10 before | Expand all | Expand 10 after
1167 1210
1168 void LCodeGen::DoOsrEntry(LOsrEntry* instr) { 1211 void LCodeGen::DoOsrEntry(LOsrEntry* instr) {
1169 Abort("Unimplemented: %s", "DoOsrEntry"); 1212 Abort("Unimplemented: %s", "DoOsrEntry");
1170 } 1213 }
1171 1214
1172 #undef __ 1215 #undef __
1173 1216
1174 } } // namespace v8::internal 1217 } } // namespace v8::internal
1175 1218
1176 #endif // V8_TARGET_ARCH_X64 1219 #endif // V8_TARGET_ARCH_X64
OLDNEW
« no previous file with comments | « src/v8globals.h ('k') | src/x64/lithium-x64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698