| OLD | NEW |
| 1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 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/code-generator.h" | 5 #include "src/compiler/code-generator.h" |
| 6 | 6 |
| 7 #include "src/ast/scopes.h" | 7 #include "src/ast/scopes.h" |
| 8 #include "src/compiler/code-generator-impl.h" | 8 #include "src/compiler/code-generator-impl.h" |
| 9 #include "src/compiler/gap-resolver.h" | 9 #include "src/compiler/gap-resolver.h" |
| 10 #include "src/compiler/node-matchers.h" | 10 #include "src/compiler/node-matchers.h" |
| (...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 254 } \ | 254 } \ |
| 255 } else { \ | 255 } else { \ |
| 256 if (instr->InputAt(1)->IsRegister()) { \ | 256 if (instr->InputAt(1)->IsRegister()) { \ |
| 257 __ asm_instr(i.InputRegister(0), i.InputRegister(1)); \ | 257 __ asm_instr(i.InputRegister(0), i.InputRegister(1)); \ |
| 258 } else { \ | 258 } else { \ |
| 259 __ asm_instr(i.InputRegister(0), i.InputOperand(1)); \ | 259 __ asm_instr(i.InputRegister(0), i.InputOperand(1)); \ |
| 260 } \ | 260 } \ |
| 261 } \ | 261 } \ |
| 262 } while (0) | 262 } while (0) |
| 263 | 263 |
| 264 #define ASSEMBLE_COMPARE(asm_instr) \ |
| 265 do { \ |
| 266 if (AddressingModeField::decode(instr->opcode()) != kMode_None) { \ |
| 267 size_t index = 0; \ |
| 268 Operand left = i.MemoryOperand(&index); \ |
| 269 if (HasImmediateInput(instr, index)) { \ |
| 270 __ asm_instr(left, i.InputImmediate(index)); \ |
| 271 } else { \ |
| 272 __ asm_instr(left, i.InputRegister(index)); \ |
| 273 } \ |
| 274 } else { \ |
| 275 if (HasImmediateInput(instr, 1)) { \ |
| 276 if (instr->InputAt(0)->IsRegister()) { \ |
| 277 __ asm_instr(i.InputRegister(0), i.InputImmediate(1)); \ |
| 278 } else { \ |
| 279 __ asm_instr(i.InputOperand(0), i.InputImmediate(1)); \ |
| 280 } \ |
| 281 } else { \ |
| 282 if (instr->InputAt(1)->IsRegister()) { \ |
| 283 __ asm_instr(i.InputRegister(0), i.InputRegister(1)); \ |
| 284 } else { \ |
| 285 __ asm_instr(i.InputRegister(0), i.InputOperand(1)); \ |
| 286 } \ |
| 287 } \ |
| 288 } \ |
| 289 } while (0) |
| 264 | 290 |
| 265 #define ASSEMBLE_MULT(asm_instr) \ | 291 #define ASSEMBLE_MULT(asm_instr) \ |
| 266 do { \ | 292 do { \ |
| 267 if (HasImmediateInput(instr, 1)) { \ | 293 if (HasImmediateInput(instr, 1)) { \ |
| 268 if (instr->InputAt(0)->IsRegister()) { \ | 294 if (instr->InputAt(0)->IsRegister()) { \ |
| 269 __ asm_instr(i.OutputRegister(), i.InputRegister(0), \ | 295 __ asm_instr(i.OutputRegister(), i.InputRegister(0), \ |
| 270 i.InputImmediate(1)); \ | 296 i.InputImmediate(1)); \ |
| 271 } else { \ | 297 } else { \ |
| 272 __ asm_instr(i.OutputRegister(), i.InputOperand(0), \ | 298 __ asm_instr(i.OutputRegister(), i.InputOperand(0), \ |
| 273 i.InputImmediate(1)); \ | 299 i.InputImmediate(1)); \ |
| (...skipping 492 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 766 case kX64Sub: | 792 case kX64Sub: |
| 767 ASSEMBLE_BINOP(subq); | 793 ASSEMBLE_BINOP(subq); |
| 768 break; | 794 break; |
| 769 case kX64And32: | 795 case kX64And32: |
| 770 ASSEMBLE_BINOP(andl); | 796 ASSEMBLE_BINOP(andl); |
| 771 break; | 797 break; |
| 772 case kX64And: | 798 case kX64And: |
| 773 ASSEMBLE_BINOP(andq); | 799 ASSEMBLE_BINOP(andq); |
| 774 break; | 800 break; |
| 775 case kX64Cmp32: | 801 case kX64Cmp32: |
| 776 ASSEMBLE_BINOP(cmpl); | 802 ASSEMBLE_COMPARE(cmpl); |
| 777 break; | 803 break; |
| 778 case kX64Cmp: | 804 case kX64Cmp: |
| 779 ASSEMBLE_BINOP(cmpq); | 805 ASSEMBLE_COMPARE(cmpq); |
| 780 break; | 806 break; |
| 781 case kX64Test32: | 807 case kX64Test32: |
| 782 ASSEMBLE_BINOP(testl); | 808 ASSEMBLE_COMPARE(testl); |
| 783 break; | 809 break; |
| 784 case kX64Test: | 810 case kX64Test: |
| 785 ASSEMBLE_BINOP(testq); | 811 ASSEMBLE_COMPARE(testq); |
| 786 break; | 812 break; |
| 787 case kX64Imul32: | 813 case kX64Imul32: |
| 788 ASSEMBLE_MULT(imull); | 814 ASSEMBLE_MULT(imull); |
| 789 break; | 815 break; |
| 790 case kX64Imul: | 816 case kX64Imul: |
| 791 ASSEMBLE_MULT(imulq); | 817 ASSEMBLE_MULT(imulq); |
| 792 break; | 818 break; |
| 793 case kX64ImulHigh32: | 819 case kX64ImulHigh32: |
| 794 if (instr->InputAt(1)->IsRegister()) { | 820 if (instr->InputAt(1)->IsRegister()) { |
| 795 __ imull(i.InputRegister(1)); | 821 __ imull(i.InputRegister(1)); |
| (...skipping 1368 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2164 int padding_size = last_lazy_deopt_pc_ + space_needed - current_pc; | 2190 int padding_size = last_lazy_deopt_pc_ + space_needed - current_pc; |
| 2165 __ Nop(padding_size); | 2191 __ Nop(padding_size); |
| 2166 } | 2192 } |
| 2167 } | 2193 } |
| 2168 | 2194 |
| 2169 #undef __ | 2195 #undef __ |
| 2170 | 2196 |
| 2171 } // namespace compiler | 2197 } // namespace compiler |
| 2172 } // namespace internal | 2198 } // namespace internal |
| 2173 } // namespace v8 | 2199 } // namespace v8 |
| OLD | NEW |