Changeset 215565 in webkit for trunk/Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h
- Timestamp:
- Apr 20, 2017, 10:55:44 AM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h
r214384 r215565 3024 3024 void atomicStrongCAS8(StatusCondition cond, RegisterID expectedAndResult, RegisterID newValue, Address address, RegisterID result) 3025 3025 { 3026 atomicStrongCAS(cond, expectedAndResult, result, [&] { m_assembler.cmpxchgb_rm(newValue, address.offset, address.base); });3026 atomicStrongCAS(cond, expectedAndResult, result, address, [&] { m_assembler.cmpxchgb_rm(newValue, address.offset, address.base); }); 3027 3027 } 3028 3028 3029 3029 void atomicStrongCAS8(StatusCondition cond, RegisterID expectedAndResult, RegisterID newValue, BaseIndex address, RegisterID result) 3030 3030 { 3031 atomicStrongCAS(cond, expectedAndResult, result, [&] { m_assembler.cmpxchgb_rm(newValue, address.offset, address.base, address.index, address.scale); });3031 atomicStrongCAS(cond, expectedAndResult, result, address, [&] { m_assembler.cmpxchgb_rm(newValue, address.offset, address.base, address.index, address.scale); }); 3032 3032 } 3033 3033 3034 3034 void atomicStrongCAS16(StatusCondition cond, RegisterID expectedAndResult, RegisterID newValue, Address address, RegisterID result) 3035 3035 { 3036 atomicStrongCAS(cond, expectedAndResult, result, [&] { m_assembler.cmpxchgw_rm(newValue, address.offset, address.base); });3036 atomicStrongCAS(cond, expectedAndResult, result, address, [&] { m_assembler.cmpxchgw_rm(newValue, address.offset, address.base); }); 3037 3037 } 3038 3038 3039 3039 void atomicStrongCAS16(StatusCondition cond, RegisterID expectedAndResult, RegisterID newValue, BaseIndex address, RegisterID result) 3040 3040 { 3041 atomicStrongCAS(cond, expectedAndResult, result, [&] { m_assembler.cmpxchgw_rm(newValue, address.offset, address.base, address.index, address.scale); });3041 atomicStrongCAS(cond, expectedAndResult, result, address, [&] { m_assembler.cmpxchgw_rm(newValue, address.offset, address.base, address.index, address.scale); }); 3042 3042 } 3043 3043 3044 3044 void atomicStrongCAS32(StatusCondition cond, RegisterID expectedAndResult, RegisterID newValue, Address address, RegisterID result) 3045 3045 { 3046 atomicStrongCAS(cond, expectedAndResult, result, [&] { m_assembler.cmpxchgl_rm(newValue, address.offset, address.base); });3046 atomicStrongCAS(cond, expectedAndResult, result, address, [&] { m_assembler.cmpxchgl_rm(newValue, address.offset, address.base); }); 3047 3047 } 3048 3048 3049 3049 void atomicStrongCAS32(StatusCondition cond, RegisterID expectedAndResult, RegisterID newValue, BaseIndex address, RegisterID result) 3050 3050 { 3051 atomicStrongCAS(cond, expectedAndResult, result, [&] { m_assembler.cmpxchgl_rm(newValue, address.offset, address.base, address.index, address.scale); });3051 atomicStrongCAS(cond, expectedAndResult, result, address, [&] { m_assembler.cmpxchgl_rm(newValue, address.offset, address.base, address.index, address.scale); }); 3052 3052 } 3053 3053 3054 3054 void atomicStrongCAS8(RegisterID expectedAndResult, RegisterID newValue, Address address) 3055 3055 { 3056 atomicStrongCAS(expectedAndResult, [&] { m_assembler.cmpxchgb_rm(newValue, address.offset, address.base); });3056 atomicStrongCAS(expectedAndResult, address, [&] { m_assembler.cmpxchgb_rm(newValue, address.offset, address.base); }); 3057 3057 } 3058 3058 3059 3059 void atomicStrongCAS8(RegisterID expectedAndResult, RegisterID newValue, BaseIndex address) 3060 3060 { 3061 atomicStrongCAS(expectedAndResult, [&] { m_assembler.cmpxchgb_rm(newValue, address.offset, address.base, address.index, address.scale); });3061 atomicStrongCAS(expectedAndResult, address, [&] { m_assembler.cmpxchgb_rm(newValue, address.offset, address.base, address.index, address.scale); }); 3062 3062 } 3063 3063 3064 3064 void atomicStrongCAS16(RegisterID expectedAndResult, RegisterID newValue, Address address) 3065 3065 { 3066 atomicStrongCAS(expectedAndResult, [&] { m_assembler.cmpxchgw_rm(newValue, address.offset, address.base); });3066 atomicStrongCAS(expectedAndResult, address, [&] { m_assembler.cmpxchgw_rm(newValue, address.offset, address.base); }); 3067 3067 } 3068 3068 3069 3069 void atomicStrongCAS16(RegisterID expectedAndResult, RegisterID newValue, BaseIndex address) 3070 3070 { 3071 atomicStrongCAS(expectedAndResult, [&] { m_assembler.cmpxchgw_rm(newValue, address.offset, address.base, address.index, address.scale); });3071 atomicStrongCAS(expectedAndResult, address, [&] { m_assembler.cmpxchgw_rm(newValue, address.offset, address.base, address.index, address.scale); }); 3072 3072 } 3073 3073 3074 3074 void atomicStrongCAS32(RegisterID expectedAndResult, RegisterID newValue, Address address) 3075 3075 { 3076 atomicStrongCAS(expectedAndResult, [&] { m_assembler.cmpxchgl_rm(newValue, address.offset, address.base); });3076 atomicStrongCAS(expectedAndResult, address, [&] { m_assembler.cmpxchgl_rm(newValue, address.offset, address.base); }); 3077 3077 } 3078 3078 3079 3079 void atomicStrongCAS32(RegisterID expectedAndResult, RegisterID newValue, BaseIndex address) 3080 3080 { 3081 atomicStrongCAS(expectedAndResult, [&] { m_assembler.cmpxchgl_rm(newValue, address.offset, address.base, address.index, address.scale); });3081 atomicStrongCAS(expectedAndResult, address, [&] { m_assembler.cmpxchgl_rm(newValue, address.offset, address.base, address.index, address.scale); }); 3082 3082 } 3083 3083 3084 3084 Jump branchAtomicStrongCAS8(StatusCondition cond, RegisterID expectedAndResult, RegisterID newValue, Address address) 3085 3085 { 3086 return branchAtomicStrongCAS(cond, expectedAndResult, [&] { m_assembler.cmpxchgb_rm(newValue, address.offset, address.base); });3086 return branchAtomicStrongCAS(cond, expectedAndResult, address, [&] { m_assembler.cmpxchgb_rm(newValue, address.offset, address.base); }); 3087 3087 } 3088 3088 3089 3089 Jump branchAtomicStrongCAS8(StatusCondition cond, RegisterID expectedAndResult, RegisterID newValue, BaseIndex address) 3090 3090 { 3091 return branchAtomicStrongCAS(cond, expectedAndResult, [&] { m_assembler.cmpxchgb_rm(newValue, address.offset, address.base, address.index, address.scale); });3091 return branchAtomicStrongCAS(cond, expectedAndResult, address, [&] { m_assembler.cmpxchgb_rm(newValue, address.offset, address.base, address.index, address.scale); }); 3092 3092 } 3093 3093 3094 3094 Jump branchAtomicStrongCAS16(StatusCondition cond, RegisterID expectedAndResult, RegisterID newValue, Address address) 3095 3095 { 3096 return branchAtomicStrongCAS(cond, expectedAndResult, [&] { m_assembler.cmpxchgw_rm(newValue, address.offset, address.base); });3096 return branchAtomicStrongCAS(cond, expectedAndResult, address, [&] { m_assembler.cmpxchgw_rm(newValue, address.offset, address.base); }); 3097 3097 } 3098 3098 3099 3099 Jump branchAtomicStrongCAS16(StatusCondition cond, RegisterID expectedAndResult, RegisterID newValue, BaseIndex address) 3100 3100 { 3101 return branchAtomicStrongCAS(cond, expectedAndResult, [&] { m_assembler.cmpxchgw_rm(newValue, address.offset, address.base, address.index, address.scale); });3101 return branchAtomicStrongCAS(cond, expectedAndResult, address, [&] { m_assembler.cmpxchgw_rm(newValue, address.offset, address.base, address.index, address.scale); }); 3102 3102 } 3103 3103 3104 3104 Jump branchAtomicStrongCAS32(StatusCondition cond, RegisterID expectedAndResult, RegisterID newValue, Address address) 3105 3105 { 3106 return branchAtomicStrongCAS(cond, expectedAndResult, [&] { m_assembler.cmpxchgl_rm(newValue, address.offset, address.base); });3106 return branchAtomicStrongCAS(cond, expectedAndResult, address, [&] { m_assembler.cmpxchgl_rm(newValue, address.offset, address.base); }); 3107 3107 } 3108 3108 3109 3109 Jump branchAtomicStrongCAS32(StatusCondition cond, RegisterID expectedAndResult, RegisterID newValue, BaseIndex address) 3110 3110 { 3111 return branchAtomicStrongCAS(cond, expectedAndResult, [&] { m_assembler.cmpxchgl_rm(newValue, address.offset, address.base, address.index, address.scale); });3111 return branchAtomicStrongCAS(cond, expectedAndResult, address, [&] { m_assembler.cmpxchgl_rm(newValue, address.offset, address.base, address.index, address.scale); }); 3112 3112 } 3113 3113 … … 4073 4073 } 4074 4074 4075 template<typename Func> 4076 void atomicStrongCAS(StatusCondition cond, RegisterID expectedAndResult, RegisterID result, const Func& func) 4077 { 4075 template<typename AddressType, typename Func> 4076 void atomicStrongCAS(StatusCondition cond, RegisterID expectedAndResult, RegisterID result, AddressType& address, const Func& func) 4077 { 4078 address = address.withSwappedRegister(X86Registers::eax, expectedAndResult); 4078 4079 swap(expectedAndResult, X86Registers::eax); 4079 4080 m_assembler.lock(); … … 4083 4084 } 4084 4085 4085 template<typename Func> 4086 void atomicStrongCAS(RegisterID expectedAndResult, const Func& func) 4087 { 4086 template<typename AddressType, typename Func> 4087 void atomicStrongCAS(RegisterID expectedAndResult, AddressType& address, const Func& func) 4088 { 4089 address = address.withSwappedRegister(X86Registers::eax, expectedAndResult); 4088 4090 swap(expectedAndResult, X86Registers::eax); 4089 4091 m_assembler.lock(); … … 4092 4094 } 4093 4095 4094 template<typename Func> 4095 Jump branchAtomicStrongCAS(StatusCondition cond, RegisterID expectedAndResult, const Func& func) 4096 { 4096 template<typename AddressType, typename Func> 4097 Jump branchAtomicStrongCAS(StatusCondition cond, RegisterID expectedAndResult, AddressType& address, const Func& func) 4098 { 4099 address = address.withSwappedRegister(X86Registers::eax, expectedAndResult); 4097 4100 swap(expectedAndResult, X86Registers::eax); 4098 4101 m_assembler.lock();
Note:
See TracChangeset
for help on using the changeset viewer.