| OLD | NEW | 
|     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/code-generator.h" |     5 #include "src/compiler/code-generator.h" | 
|     6  |     6  | 
|     7 #include "src/arm64/assembler-arm64-inl.h" |     7 #include "src/arm64/assembler-arm64-inl.h" | 
|     8 #include "src/arm64/frames-arm64.h" |     8 #include "src/arm64/frames-arm64.h" | 
|     9 #include "src/arm64/macro-assembler-arm64-inl.h" |     9 #include "src/arm64/macro-assembler-arm64-inl.h" | 
|    10 #include "src/compilation-info.h" |    10 #include "src/compilation-info.h" | 
| (...skipping 516 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   527   do {                                                                \ |   527   do {                                                                \ | 
|   528     __ Dmb(InnerShareable, BarrierAll);                               \ |   528     __ Dmb(InnerShareable, BarrierAll);                               \ | 
|   529     __ asm_instr(i.InputRegister(2),                                  \ |   529     __ asm_instr(i.InputRegister(2),                                  \ | 
|   530                  MemOperand(i.InputRegister(0), i.InputRegister(1))); \ |   530                  MemOperand(i.InputRegister(0), i.InputRegister(1))); \ | 
|   531     __ Dmb(InnerShareable, BarrierAll);                               \ |   531     __ Dmb(InnerShareable, BarrierAll);                               \ | 
|   532   } while (0) |   532   } while (0) | 
|   533  |   533  | 
|   534 #define ASSEMBLE_ATOMIC_EXCHANGE_INTEGER(load_instr, store_instr)      \ |   534 #define ASSEMBLE_ATOMIC_EXCHANGE_INTEGER(load_instr, store_instr)      \ | 
|   535   do {                                                                 \ |   535   do {                                                                 \ | 
|   536     Label exchange;                                                    \ |   536     Label exchange;                                                    \ | 
|   537     __ bind(&exchange);                                                \ |   537     __ Dmb(InnerShareable, BarrierAll);                                \ | 
 |   538     __ Bind(&exchange);                                                \ | 
|   538     __ Add(i.TempRegister(0), i.InputRegister(0), i.InputRegister(1)); \ |   539     __ Add(i.TempRegister(0), i.InputRegister(0), i.InputRegister(1)); \ | 
|   539     __ load_instr(i.OutputRegister32(), i.TempRegister(0));            \ |   540     __ load_instr(i.OutputRegister32(), i.TempRegister(0));            \ | 
|   540     __ store_instr(i.TempRegister32(), i.InputRegister32(2),           \ |   541     __ store_instr(i.TempRegister32(), i.InputRegister32(2),           \ | 
|   541                    i.TempRegister(0));                                 \ |   542                    i.TempRegister(0));                                 \ | 
|   542     __ cbnz(i.TempRegister32(), &exchange);                            \ |   543     __ Cbnz(i.TempRegister32(), &exchange);                            \ | 
 |   544     __ Dmb(InnerShareable, BarrierAll);                                \ | 
|   543   } while (0) |   545   } while (0) | 
|   544  |   546  | 
|   545 #define ASSEMBLE_IEEE754_BINOP(name)                                          \ |   547 #define ASSEMBLE_IEEE754_BINOP(name)                                          \ | 
|   546   do {                                                                        \ |   548   do {                                                                        \ | 
|   547     FrameScope scope(masm(), StackFrame::MANUAL);                             \ |   549     FrameScope scope(masm(), StackFrame::MANUAL);                             \ | 
|   548     __ CallCFunction(ExternalReference::ieee754_##name##_function(isolate()), \ |   550     __ CallCFunction(ExternalReference::ieee754_##name##_function(isolate()), \ | 
|   549                      0, 2);                                                   \ |   551                      0, 2);                                                   \ | 
|   550   } while (0) |   552   } while (0) | 
|   551  |   553  | 
|   552 #define ASSEMBLE_IEEE754_UNOP(name)                                           \ |   554 #define ASSEMBLE_IEEE754_UNOP(name)                                           \ | 
| (...skipping 1087 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1640     case kAtomicStoreWord16: |  1642     case kAtomicStoreWord16: | 
|  1641       ASSEMBLE_ATOMIC_STORE_INTEGER(Strh); |  1643       ASSEMBLE_ATOMIC_STORE_INTEGER(Strh); | 
|  1642       break; |  1644       break; | 
|  1643     case kAtomicStoreWord32: |  1645     case kAtomicStoreWord32: | 
|  1644       __ Dmb(InnerShareable, BarrierAll); |  1646       __ Dmb(InnerShareable, BarrierAll); | 
|  1645       __ Str(i.InputRegister32(2), |  1647       __ Str(i.InputRegister32(2), | 
|  1646              MemOperand(i.InputRegister(0), i.InputRegister(1))); |  1648              MemOperand(i.InputRegister(0), i.InputRegister(1))); | 
|  1647       __ Dmb(InnerShareable, BarrierAll); |  1649       __ Dmb(InnerShareable, BarrierAll); | 
|  1648       break; |  1650       break; | 
|  1649     case kAtomicExchangeInt8: |  1651     case kAtomicExchangeInt8: | 
|  1650       ASSEMBLE_ATOMIC_EXCHANGE_INTEGER(ldaxrb, stlxrb); |  1652       ASSEMBLE_ATOMIC_EXCHANGE_INTEGER(ldxrb, stxrb); | 
|  1651       __ Sxtb(i.OutputRegister(0), i.OutputRegister(0)); |  1653       __ Sxtb(i.OutputRegister(0), i.OutputRegister(0)); | 
|  1652       break; |  1654       break; | 
|  1653     case kAtomicExchangeUint8: |  1655     case kAtomicExchangeUint8: | 
|  1654       ASSEMBLE_ATOMIC_EXCHANGE_INTEGER(ldaxrb, stlxrb); |  1656       ASSEMBLE_ATOMIC_EXCHANGE_INTEGER(ldxrb, stxrb); | 
|  1655       break; |  1657       break; | 
|  1656     case kAtomicExchangeInt16: |  1658     case kAtomicExchangeInt16: | 
|  1657       ASSEMBLE_ATOMIC_EXCHANGE_INTEGER(ldaxrh, stlxrh); |  1659       ASSEMBLE_ATOMIC_EXCHANGE_INTEGER(ldxrh, stxrh); | 
|  1658       __ Sxth(i.OutputRegister(0), i.OutputRegister(0)); |  1660       __ Sxth(i.OutputRegister(0), i.OutputRegister(0)); | 
|  1659       break; |  1661       break; | 
|  1660     case kAtomicExchangeUint16: |  1662     case kAtomicExchangeUint16: | 
|  1661       ASSEMBLE_ATOMIC_EXCHANGE_INTEGER(ldaxrh, stlxrh); |  1663       ASSEMBLE_ATOMIC_EXCHANGE_INTEGER(ldxrh, stxrh); | 
|  1662       break; |  1664       break; | 
|  1663     case kAtomicExchangeWord32: |  1665     case kAtomicExchangeWord32: | 
|  1664       ASSEMBLE_ATOMIC_EXCHANGE_INTEGER(ldaxr, stlxr); |  1666       ASSEMBLE_ATOMIC_EXCHANGE_INTEGER(ldxr, stxr); | 
|  1665       break; |  1667       break; | 
|  1666   } |  1668   } | 
|  1667   return kSuccess; |  1669   return kSuccess; | 
|  1668 }  // NOLINT(readability/fn_size) |  1670 }  // NOLINT(readability/fn_size) | 
|  1669  |  1671  | 
|  1670  |  1672  | 
|  1671 // Assemble branches after this instruction. |  1673 // Assemble branches after this instruction. | 
|  1672 void CodeGenerator::AssembleArchBranch(Instruction* instr, BranchInfo* branch) { |  1674 void CodeGenerator::AssembleArchBranch(Instruction* instr, BranchInfo* branch) { | 
|  1673   Arm64OperandConverter i(this, instr); |  1675   Arm64OperandConverter i(this, instr); | 
|  1674   Label* tlabel = branch->true_label; |  1676   Label* tlabel = branch->true_label; | 
| (...skipping 534 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  2209       padding_size -= kInstructionSize; |  2211       padding_size -= kInstructionSize; | 
|  2210     } |  2212     } | 
|  2211   } |  2213   } | 
|  2212 } |  2214 } | 
|  2213  |  2215  | 
|  2214 #undef __ |  2216 #undef __ | 
|  2215  |  2217  | 
|  2216 }  // namespace compiler |  2218 }  // namespace compiler | 
|  2217 }  // namespace internal |  2219 }  // namespace internal | 
|  2218 }  // namespace v8 |  2220 }  // namespace v8 | 
| OLD | NEW |