1 //! A place to park MachInst::Inst fragments which are common across multiple architectures.
2 
3 use crate::ir;
4 
5 /// Atomic memory update operations.  As of 21 Aug 2020 these are used for the aarch64 and x64
6 /// targets.
7 #[derive(Clone, Copy, Debug, PartialEq, Eq)]
8 #[repr(u8)]
9 pub enum AtomicRmwOp {
10     /// Add
11     Add,
12     /// Sub
13     Sub,
14     /// And
15     And,
16     /// Or
17     Or,
18     /// Exclusive Or
19     Xor,
20     /// Exchange (swap operands)
21     Xchg,
22 }
23 
24 impl AtomicRmwOp {
25     /// Converts an `ir::AtomicRmwOp` to the corresponding `inst_common::AtomicRmwOp`.
26     pub fn from(ir_op: ir::AtomicRmwOp) -> Self {
27         match ir_op {
28             ir::AtomicRmwOp::Add => AtomicRmwOp::Add,
29             ir::AtomicRmwOp::Sub => AtomicRmwOp::Sub,
30             ir::AtomicRmwOp::And => AtomicRmwOp::And,
31             ir::AtomicRmwOp::Or => AtomicRmwOp::Or,
32             ir::AtomicRmwOp::Xor => AtomicRmwOp::Xor,
33             ir::AtomicRmwOp::Xchg => AtomicRmwOp::Xchg,
34         }
35     }
36 }
37