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 #if V8_TARGET_ARCH_ARM64 | 5 #if V8_TARGET_ARCH_ARM64 |
6 | 6 |
7 #include "src/base/bits.h" | 7 #include "src/base/bits.h" |
8 #include "src/base/division-by-constant.h" | 8 #include "src/base/division-by-constant.h" |
9 #include "src/bootstrapper.h" | 9 #include "src/bootstrapper.h" |
10 #include "src/codegen.h" | 10 #include "src/codegen.h" |
(...skipping 1859 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1870 SetStackPointer(old_stack_pointer); | 1870 SetStackPointer(old_stack_pointer); |
1871 } | 1871 } |
1872 } | 1872 } |
1873 | 1873 |
1874 | 1874 |
1875 void MacroAssembler::Jump(Register target) { | 1875 void MacroAssembler::Jump(Register target) { |
1876 Br(target); | 1876 Br(target); |
1877 } | 1877 } |
1878 | 1878 |
1879 | 1879 |
1880 void MacroAssembler::Jump(intptr_t target, RelocInfo::Mode rmode) { | 1880 void MacroAssembler::Jump(intptr_t target, RelocInfo::Mode rmode, |
| 1881 Condition cond) { |
| 1882 if (cond == nv) return; |
1881 UseScratchRegisterScope temps(this); | 1883 UseScratchRegisterScope temps(this); |
1882 Register temp = temps.AcquireX(); | 1884 Register temp = temps.AcquireX(); |
| 1885 Label done; |
| 1886 if (cond != al) B(NegateCondition(cond), &done); |
1883 Mov(temp, Operand(target, rmode)); | 1887 Mov(temp, Operand(target, rmode)); |
1884 Br(temp); | 1888 Br(temp); |
| 1889 Bind(&done); |
1885 } | 1890 } |
1886 | 1891 |
1887 | 1892 |
1888 void MacroAssembler::Jump(Address target, RelocInfo::Mode rmode) { | 1893 void MacroAssembler::Jump(Address target, RelocInfo::Mode rmode, |
| 1894 Condition cond) { |
1889 DCHECK(!RelocInfo::IsCodeTarget(rmode)); | 1895 DCHECK(!RelocInfo::IsCodeTarget(rmode)); |
1890 Jump(reinterpret_cast<intptr_t>(target), rmode); | 1896 Jump(reinterpret_cast<intptr_t>(target), rmode, cond); |
1891 } | 1897 } |
1892 | 1898 |
1893 | 1899 |
1894 void MacroAssembler::Jump(Handle<Code> code, RelocInfo::Mode rmode) { | 1900 void MacroAssembler::Jump(Handle<Code> code, RelocInfo::Mode rmode, |
| 1901 Condition cond) { |
1895 DCHECK(RelocInfo::IsCodeTarget(rmode)); | 1902 DCHECK(RelocInfo::IsCodeTarget(rmode)); |
1896 AllowDeferredHandleDereference embedding_raw_address; | 1903 AllowDeferredHandleDereference embedding_raw_address; |
1897 Jump(reinterpret_cast<intptr_t>(code.location()), rmode); | 1904 Jump(reinterpret_cast<intptr_t>(code.location()), rmode, cond); |
1898 } | 1905 } |
1899 | 1906 |
1900 | 1907 |
1901 void MacroAssembler::Call(Register target) { | 1908 void MacroAssembler::Call(Register target) { |
1902 BlockPoolsScope scope(this); | 1909 BlockPoolsScope scope(this); |
1903 #ifdef DEBUG | 1910 #ifdef DEBUG |
1904 Label start_call; | 1911 Label start_call; |
1905 Bind(&start_call); | 1912 Bind(&start_call); |
1906 #endif | 1913 #endif |
1907 | 1914 |
(...skipping 3139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5047 } | 5054 } |
5048 | 5055 |
5049 | 5056 |
5050 #undef __ | 5057 #undef __ |
5051 | 5058 |
5052 | 5059 |
5053 } // namespace internal | 5060 } // namespace internal |
5054 } // namespace v8 | 5061 } // namespace v8 |
5055 | 5062 |
5056 #endif // V8_TARGET_ARCH_ARM64 | 5063 #endif // V8_TARGET_ARCH_ARM64 |
OLD | NEW |