Reimplement Atomic::cmpxchg as a template.  One goal is to generalize the API and make it more type-safe, eliminating the need for most casts.  This includes replacing the type-information-losing cmpxchg_ptr with type-safe cmpxchg.  Another goal is to allow more direct platform-specific implementation of the generic operation, for platforms that support that via generic intrinsics.
Subtask ofJDK-8184334, addressing only Atomic::cmpxchg.
            
Subtask of
- relates to
- 
                    JDK-8186734 AIX build broken after 8186166: Generalize Atomic::cmpxchg with templates -           
- Resolved
 
-         
- 
                    JDK-8186476 Generalize Atomic::add with templates -           
- Resolved
 
-         
- 
                    JDK-8184334 Generalizing Atomic with templates -           
- Closed
 
-         
- 
                    JDK-8194406 Use Atomic::replace_if_null -           
- Resolved
 
-         
- 
                    JDK-8194691 Cleanup unnecessary casts in Atomic/OrderAccess uses -           
- Resolved
 
-