| 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/frames-arm64.h" | 7 #include "src/arm64/frames-arm64.h" |
| 8 #include "src/arm64/macro-assembler-arm64.h" | 8 #include "src/arm64/macro-assembler-arm64.h" |
| 9 #include "src/ast/scopes.h" | 9 #include "src/ast/scopes.h" |
| 10 #include "src/compiler/code-generator-impl.h" | 10 #include "src/compiler/code-generator-impl.h" |
| (...skipping 494 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 505 } while (0) | 505 } while (0) |
| 506 | 506 |
| 507 #define ASSEMBLE_ATOMIC_STORE_INTEGER(asm_instr) \ | 507 #define ASSEMBLE_ATOMIC_STORE_INTEGER(asm_instr) \ |
| 508 do { \ | 508 do { \ |
| 509 __ Dmb(InnerShareable, BarrierAll); \ | 509 __ Dmb(InnerShareable, BarrierAll); \ |
| 510 __ asm_instr(i.InputRegister(2), \ | 510 __ asm_instr(i.InputRegister(2), \ |
| 511 MemOperand(i.InputRegister(0), i.InputRegister(1))); \ | 511 MemOperand(i.InputRegister(0), i.InputRegister(1))); \ |
| 512 __ Dmb(InnerShareable, BarrierAll); \ | 512 __ Dmb(InnerShareable, BarrierAll); \ |
| 513 } while (0) | 513 } while (0) |
| 514 | 514 |
| 515 #define ASSEMBLE_IEEE754_UNOP(name) \ |
| 516 do { \ |
| 517 FrameScope scope(masm(), StackFrame::MANUAL); \ |
| 518 __ CallCFunction(ExternalReference::ieee754_##name##_function(isolate()), \ |
| 519 0, 1); \ |
| 520 } while (0) |
| 521 |
| 515 void CodeGenerator::AssembleDeconstructFrame() { | 522 void CodeGenerator::AssembleDeconstructFrame() { |
| 516 const CallDescriptor* descriptor = linkage()->GetIncomingDescriptor(); | 523 const CallDescriptor* descriptor = linkage()->GetIncomingDescriptor(); |
| 517 if (descriptor->IsCFunctionCall() || descriptor->UseNativeStack()) { | 524 if (descriptor->IsCFunctionCall() || descriptor->UseNativeStack()) { |
| 518 __ Mov(csp, fp); | 525 __ Mov(csp, fp); |
| 519 } else { | 526 } else { |
| 520 __ Mov(jssp, fp); | 527 __ Mov(jssp, fp); |
| 521 } | 528 } |
| 522 __ Pop(fp, lr); | 529 __ Pop(fp, lr); |
| 523 } | 530 } |
| 524 | 531 |
| (...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 785 frame_access_state()->GetFrameOffset(i.InputInt32(0)); | 792 frame_access_state()->GetFrameOffset(i.InputInt32(0)); |
| 786 Register base; | 793 Register base; |
| 787 if (offset.from_stack_pointer()) { | 794 if (offset.from_stack_pointer()) { |
| 788 base = __ StackPointer(); | 795 base = __ StackPointer(); |
| 789 } else { | 796 } else { |
| 790 base = fp; | 797 base = fp; |
| 791 } | 798 } |
| 792 __ Add(i.OutputRegister(0), base, Operand(offset.offset())); | 799 __ Add(i.OutputRegister(0), base, Operand(offset.offset())); |
| 793 break; | 800 break; |
| 794 } | 801 } |
| 795 case kIeee754Float64Log: { | 802 case kIeee754Float64Log: |
| 796 FrameScope scope(masm(), StackFrame::MANUAL); | 803 ASSEMBLE_IEEE754_UNOP(log); |
| 797 DCHECK(d0.is(i.InputDoubleRegister(0))); | |
| 798 DCHECK(d0.is(i.OutputDoubleRegister())); | |
| 799 __ CallCFunction(ExternalReference::ieee754_log_function(isolate()), 0, | |
| 800 1); | |
| 801 break; | 804 break; |
| 802 } | 805 case kIeee754Float64Log1p: |
| 806 ASSEMBLE_IEEE754_UNOP(log1p); |
| 807 break; |
| 803 case kArm64Float32RoundDown: | 808 case kArm64Float32RoundDown: |
| 804 __ Frintm(i.OutputFloat32Register(), i.InputFloat32Register(0)); | 809 __ Frintm(i.OutputFloat32Register(), i.InputFloat32Register(0)); |
| 805 break; | 810 break; |
| 806 case kArm64Float64RoundDown: | 811 case kArm64Float64RoundDown: |
| 807 __ Frintm(i.OutputDoubleRegister(), i.InputDoubleRegister(0)); | 812 __ Frintm(i.OutputDoubleRegister(), i.InputDoubleRegister(0)); |
| 808 break; | 813 break; |
| 809 case kArm64Float32RoundUp: | 814 case kArm64Float32RoundUp: |
| 810 __ Frintp(i.OutputFloat32Register(), i.InputFloat32Register(0)); | 815 __ Frintp(i.OutputFloat32Register(), i.InputFloat32Register(0)); |
| 811 break; | 816 break; |
| 812 case kArm64Float64RoundUp: | 817 case kArm64Float64RoundUp: |
| (...skipping 1120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1933 padding_size -= kInstructionSize; | 1938 padding_size -= kInstructionSize; |
| 1934 } | 1939 } |
| 1935 } | 1940 } |
| 1936 } | 1941 } |
| 1937 | 1942 |
| 1938 #undef __ | 1943 #undef __ |
| 1939 | 1944 |
| 1940 } // namespace compiler | 1945 } // namespace compiler |
| 1941 } // namespace internal | 1946 } // namespace internal |
| 1942 } // namespace v8 | 1947 } // namespace v8 |
| OLD | NEW |