2005-12-11 Zoltan Varga <vargaz@gmail.com>
[mono.git] / mono / mini / inssel-ia64.brg
index 4ba649a2fa137552f80f548e657837d61f8f7b28..452796a25e69d4835277c98a029c9f58eccfe04c 100644 (file)
@@ -294,6 +294,28 @@ reg: CEE_LDIND_U4 (OP_REGVAR) "0" {
        tree->dreg = state->reg1;
 }
 
+reg: OP_ATOMIC_ADD_NEW_I4 (base, OP_ICONST),
+reg: OP_ATOMIC_ADD_NEW_I8 (base, OP_ICONST) {
+       tree->opcode = tree->opcode == OP_ATOMIC_ADD_NEW_I4 ? OP_IA64_FETCHADD4_IMM : OP_IA64_FETCHADD8_IMM;
+       tree->dreg = state->reg1;
+       tree->inst_imm = state->right->tree->inst_imm;
+       tree->inst_basereg = state->left->tree->inst_basereg; 
+       tree->inst_offset = state->left->tree->inst_offset; 
+    
+       mono_bblock_add_inst (s->cbb, tree);
+}
+
+reg: OP_ATOMIC_EXCHANGE_I4 (base, reg),
+reg: OP_ATOMIC_EXCHANGE_I8 (base, reg) {
+       tree->opcode = tree->opcode;
+       tree->dreg = state->reg1;
+       tree->sreg2 = state->right->reg1;
+       tree->inst_basereg = state->left->tree->inst_basereg; 
+       tree->inst_offset = state->left->tree->inst_offset; 
+    
+       mono_bblock_add_inst (s->cbb, tree);
+}
+
 # Optimized memset implementation
 stmt: OP_MEMSET (base) "0" {
        int dest_reg, dest_reg2, val_reg, unit, align;