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