| OLD | NEW | 
|     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 55 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|    66     va_start(arguments, format); |    66     va_start(arguments, format); | 
|    67     OS::VPrint(format, arguments); |    67     OS::VPrint(format, arguments); | 
|    68     va_end(arguments); |    68     va_end(arguments); | 
|    69     PrintF("\n"); |    69     PrintF("\n"); | 
|    70   } |    70   } | 
|    71   status_ = ABORTED; |    71   status_ = ABORTED; | 
|    72 } |    72 } | 
|    73  |    73  | 
|    74  |    74  | 
|    75 void LCodeGen::Comment(const char* format, ...) { |    75 void LCodeGen::Comment(const char* format, ...) { | 
|    76   Abort("Unimplemented: %s", "Comment"); |    76   if (!FLAG_code_comments) return; | 
 |    77   char buffer[4 * KB]; | 
 |    78   StringBuilder builder(buffer, ARRAY_SIZE(buffer)); | 
 |    79   va_list arguments; | 
 |    80   va_start(arguments, format); | 
 |    81   builder.AddFormattedList(format, arguments); | 
 |    82   va_end(arguments); | 
 |    83  | 
 |    84   // Copy the string before recording it in the assembler to avoid | 
 |    85   // issues when the stack allocated buffer goes out of scope. | 
 |    86   size_t length = builder.position(); | 
 |    87   Vector<char> copy = Vector<char>::New(length + 1); | 
 |    88   memcpy(copy.start(), builder.Finalize(), copy.length()); | 
 |    89   masm()->RecordComment(copy.start()); | 
|    77 } |    90 } | 
|    78  |    91  | 
|    79  |    92  | 
|    80 bool LCodeGen::GeneratePrologue() { |    93 bool LCodeGen::GeneratePrologue() { | 
|    81   Abort("Unimplemented: %s", "GeneratePrologue"); |    94   Abort("Unimplemented: %s", "GeneratePrologue"); | 
|    82   return !is_aborted(); |    95   return false; | 
|    83 } |    96 } | 
|    84  |    97  | 
|    85  |    98  | 
|    86 bool LCodeGen::GenerateBody() { |    99 bool LCodeGen::GenerateBody() { | 
|    87   ASSERT(is_generating()); |   100   ASSERT(is_generating()); | 
|    88   bool emit_instructions = true; |   101   bool emit_instructions = true; | 
|    89   for (current_instruction_ = 0; |   102   for (current_instruction_ = 0; | 
|    90        !is_aborted() && current_instruction_ < instructions_->length(); |   103        !is_aborted() && current_instruction_ < instructions_->length(); | 
|    91        current_instruction_++) { |   104        current_instruction_++) { | 
|    92     LInstruction* instr = instructions_->at(current_instruction_); |   105     LInstruction* instr = instructions_->at(current_instruction_); | 
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   124  |   137  | 
|   125   // Deferred code is the last part of the instruction sequence. Mark |   138   // Deferred code is the last part of the instruction sequence. Mark | 
|   126   // the generated code as done unless we bailed out. |   139   // the generated code as done unless we bailed out. | 
|   127   if (!is_aborted()) status_ = DONE; |   140   if (!is_aborted()) status_ = DONE; | 
|   128   return !is_aborted(); |   141   return !is_aborted(); | 
|   129 } |   142 } | 
|   130  |   143  | 
|   131  |   144  | 
|   132 bool LCodeGen::GenerateSafepointTable() { |   145 bool LCodeGen::GenerateSafepointTable() { | 
|   133   Abort("Unimplemented: %s", "GeneratePrologue"); |   146   Abort("Unimplemented: %s", "GeneratePrologue"); | 
|   134   return !is_aborted(); |   147   return false; | 
|   135 } |   148 } | 
|   136  |   149  | 
|   137  |   150  | 
|   138 Register LCodeGen::ToRegister(int index) const { |   151 Register LCodeGen::ToRegister(int index) const { | 
|   139   return Register::FromAllocationIndex(index); |   152   return Register::FromAllocationIndex(index); | 
|   140 } |   153 } | 
|   141  |   154  | 
|   142  |   155  | 
|   143 XMMRegister LCodeGen::ToDoubleRegister(int index) const { |   156 XMMRegister LCodeGen::ToDoubleRegister(int index) const { | 
|   144   return XMMRegister::FromAllocationIndex(index); |   157   return XMMRegister::FromAllocationIndex(index); | 
| (...skipping 335 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   480   Abort("Unimplemented: %s", "DoConstantI"); |   493   Abort("Unimplemented: %s", "DoConstantI"); | 
|   481 } |   494 } | 
|   482  |   495  | 
|   483  |   496  | 
|   484 void LCodeGen::DoConstantD(LConstantD* instr) { |   497 void LCodeGen::DoConstantD(LConstantD* instr) { | 
|   485   Abort("Unimplemented: %s", "DoConstantI"); |   498   Abort("Unimplemented: %s", "DoConstantI"); | 
|   486 } |   499 } | 
|   487  |   500  | 
|   488  |   501  | 
|   489 void LCodeGen::DoConstantT(LConstantT* instr) { |   502 void LCodeGen::DoConstantT(LConstantT* instr) { | 
|   490   Abort("Unimplemented: %s", "DoConstantT"); |   503     ASSERT(instr->result()->IsRegister()); | 
 |   504   __ Move(ToRegister(instr->result()), instr->value()); | 
|   491 } |   505 } | 
|   492  |   506  | 
|   493  |   507  | 
|   494 void LCodeGen::DoJSArrayLength(LJSArrayLength* instr) { |   508 void LCodeGen::DoJSArrayLength(LJSArrayLength* instr) { | 
|   495   Abort("Unimplemented: %s", "DoJSArrayLength"); |   509   Abort("Unimplemented: %s", "DoJSArrayLength"); | 
|   496 } |   510 } | 
|   497  |   511  | 
|   498  |   512  | 
|   499 void LCodeGen::DoFixedArrayLength(LFixedArrayLength* instr) { |   513 void LCodeGen::DoFixedArrayLength(LFixedArrayLength* instr) { | 
|   500   Abort("Unimplemented: %s", "DoFixedArrayLength"); |   514   Abort("Unimplemented: %s", "DoFixedArrayLength"); | 
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   554   Abort("Unimplemented: %s", "EmitGoto"); |   568   Abort("Unimplemented: %s", "EmitGoto"); | 
|   555 } |   569 } | 
|   556  |   570  | 
|   557  |   571  | 
|   558 void LCodeGen::DoDeferredStackCheck(LGoto* instr) { |   572 void LCodeGen::DoDeferredStackCheck(LGoto* instr) { | 
|   559   Abort("Unimplemented: %s", "DoDeferredStackCheck"); |   573   Abort("Unimplemented: %s", "DoDeferredStackCheck"); | 
|   560 } |   574 } | 
|   561  |   575  | 
|   562  |   576  | 
|   563 void LCodeGen::DoGoto(LGoto* instr) { |   577 void LCodeGen::DoGoto(LGoto* instr) { | 
|   564   Abort("Unimplemented: %s", "DoGoto"); |   578   class DeferredStackCheck: public LDeferredCode { | 
 |   579    public: | 
 |   580     DeferredStackCheck(LCodeGen* codegen, LGoto* instr) | 
 |   581         : LDeferredCode(codegen), instr_(instr) { } | 
 |   582     virtual void Generate() { codegen()->DoDeferredStackCheck(instr_); } | 
 |   583    private: | 
 |   584     LGoto* instr_; | 
 |   585   }; | 
 |   586  | 
 |   587   DeferredStackCheck* deferred = NULL; | 
 |   588   if (instr->include_stack_check()) { | 
 |   589     deferred = new DeferredStackCheck(this, instr); | 
 |   590   } | 
 |   591   EmitGoto(instr->block_id(), deferred); | 
|   565 } |   592 } | 
|   566  |   593  | 
|   567  |   594  | 
|   568 Condition LCodeGen::TokenToCondition(Token::Value op, bool is_unsigned) { |   595 Condition LCodeGen::TokenToCondition(Token::Value op, bool is_unsigned) { | 
|   569   Condition cond = no_condition; |   596   Condition cond = no_condition; | 
|   570   switch (op) { |   597   switch (op) { | 
|   571     case Token::EQ: |   598     case Token::EQ: | 
|   572     case Token::EQ_STRICT: |   599     case Token::EQ_STRICT: | 
|   573       cond = equal; |   600       cond = equal; | 
|   574       break; |   601       break; | 
| (...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   752   Abort("Unimplemented: %s", "DoCmpT"); |   779   Abort("Unimplemented: %s", "DoCmpT"); | 
|   753 } |   780 } | 
|   754  |   781  | 
|   755  |   782  | 
|   756 void LCodeGen::DoCmpTAndBranch(LCmpTAndBranch* instr) { |   783 void LCodeGen::DoCmpTAndBranch(LCmpTAndBranch* instr) { | 
|   757   Abort("Unimplemented: %s", "DoCmpTAndBranch"); |   784   Abort("Unimplemented: %s", "DoCmpTAndBranch"); | 
|   758 } |   785 } | 
|   759  |   786  | 
|   760  |   787  | 
|   761 void LCodeGen::DoReturn(LReturn* instr) { |   788 void LCodeGen::DoReturn(LReturn* instr) { | 
|   762   Abort("Unimplemented: %s", "DoReturn"); |   789   if (FLAG_trace) { | 
 |   790     // Preserve the return value on the stack and rely on the runtime | 
 |   791     // call to return the value in the same register. | 
 |   792     __ push(rax); | 
 |   793     __ CallRuntime(Runtime::kTraceExit, 1); | 
 |   794   } | 
 |   795   __ movq(rsp, rbp); | 
 |   796   __ pop(rbp); | 
 |   797   __ ret((ParameterCount() + 1) * kPointerSize); | 
 |   798  | 
|   763 } |   799 } | 
|   764  |   800  | 
|   765  |   801  | 
|   766 void LCodeGen::DoLoadGlobal(LLoadGlobal* instr) { |   802 void LCodeGen::DoLoadGlobal(LLoadGlobal* instr) { | 
|   767   Abort("Unimplemented: %s", "DoLoadGlobal"); |   803   Abort("Unimplemented: %s", "DoLoadGlobal"); | 
|   768 } |   804 } | 
|   769  |   805  | 
|   770  |   806  | 
|   771 void LCodeGen::DoStoreGlobal(LStoreGlobal* instr) { |   807 void LCodeGen::DoStoreGlobal(LStoreGlobal* instr) { | 
|   772   Abort("Unimplemented: %s", "DoStoreGlobal"); |   808   Abort("Unimplemented: %s", "DoStoreGlobal"); | 
| (...skipping 351 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1124  |  1160  | 
|  1125 void LCodeGen::DoOsrEntry(LOsrEntry* instr) { |  1161 void LCodeGen::DoOsrEntry(LOsrEntry* instr) { | 
|  1126   Abort("Unimplemented: %s", "DoOsrEntry"); |  1162   Abort("Unimplemented: %s", "DoOsrEntry"); | 
|  1127 } |  1163 } | 
|  1128  |  1164  | 
|  1129 #undef __ |  1165 #undef __ | 
|  1130  |  1166  | 
|  1131 } }  // namespace v8::internal |  1167 } }  // namespace v8::internal | 
|  1132  |  1168  | 
|  1133 #endif  // V8_TARGET_ARCH_X64 |  1169 #endif  // V8_TARGET_ARCH_X64 | 
| OLD | NEW |