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/compilation-info.h" | 7 #include "src/compilation-info.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 1969 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1980 } | 1980 } |
1981 case kAtomicExchangeUint16: { | 1981 case kAtomicExchangeUint16: { |
1982 __ xchg_w(i.InputRegister(0), i.MemoryOperand(1)); | 1982 __ xchg_w(i.InputRegister(0), i.MemoryOperand(1)); |
1983 __ movzx_w(i.InputRegister(0), i.InputRegister(0)); | 1983 __ movzx_w(i.InputRegister(0), i.InputRegister(0)); |
1984 break; | 1984 break; |
1985 } | 1985 } |
1986 case kAtomicExchangeWord32: { | 1986 case kAtomicExchangeWord32: { |
1987 __ xchg(i.InputRegister(0), i.MemoryOperand(1)); | 1987 __ xchg(i.InputRegister(0), i.MemoryOperand(1)); |
1988 break; | 1988 break; |
1989 } | 1989 } |
| 1990 case kAtomicCompareExchangeInt8: { |
| 1991 __ lock(); |
| 1992 __ cmpxchg_b(i.MemoryOperand(2), i.InputRegister(1)); |
| 1993 __ movsx_b(eax, eax); |
| 1994 break; |
| 1995 } |
| 1996 case kAtomicCompareExchangeUint8: { |
| 1997 __ lock(); |
| 1998 __ cmpxchg_b(i.MemoryOperand(2), i.InputRegister(1)); |
| 1999 __ movzx_b(eax, eax); |
| 2000 break; |
| 2001 } |
| 2002 case kAtomicCompareExchangeInt16: { |
| 2003 __ lock(); |
| 2004 __ cmpxchg_w(i.MemoryOperand(2), i.InputRegister(1)); |
| 2005 __ movsx_w(eax, eax); |
| 2006 break; |
| 2007 } |
| 2008 case kAtomicCompareExchangeUint16: { |
| 2009 __ lock(); |
| 2010 __ cmpxchg_w(i.MemoryOperand(2), i.InputRegister(1)); |
| 2011 __ movzx_w(eax, eax); |
| 2012 break; |
| 2013 } |
| 2014 case kAtomicCompareExchangeWord32: { |
| 2015 __ lock(); |
| 2016 __ cmpxchg(i.MemoryOperand(2), i.InputRegister(1)); |
| 2017 break; |
| 2018 } |
1990 case kAtomicLoadInt8: | 2019 case kAtomicLoadInt8: |
1991 case kAtomicLoadUint8: | 2020 case kAtomicLoadUint8: |
1992 case kAtomicLoadInt16: | 2021 case kAtomicLoadInt16: |
1993 case kAtomicLoadUint16: | 2022 case kAtomicLoadUint16: |
1994 case kAtomicLoadWord32: | 2023 case kAtomicLoadWord32: |
1995 case kAtomicStoreWord8: | 2024 case kAtomicStoreWord8: |
1996 case kAtomicStoreWord16: | 2025 case kAtomicStoreWord16: |
1997 case kAtomicStoreWord32: | 2026 case kAtomicStoreWord32: |
1998 UNREACHABLE(); // Won't be generated by instruction selector. | 2027 UNREACHABLE(); // Won't be generated by instruction selector. |
1999 break; | 2028 break; |
(...skipping 701 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2701 int padding_size = last_lazy_deopt_pc_ + space_needed - current_pc; | 2730 int padding_size = last_lazy_deopt_pc_ + space_needed - current_pc; |
2702 __ Nop(padding_size); | 2731 __ Nop(padding_size); |
2703 } | 2732 } |
2704 } | 2733 } |
2705 | 2734 |
2706 #undef __ | 2735 #undef __ |
2707 | 2736 |
2708 } // namespace compiler | 2737 } // namespace compiler |
2709 } // namespace internal | 2738 } // namespace internal |
2710 } // namespace v8 | 2739 } // namespace v8 |
OLD | NEW |