+
+reg: OP_ATOMIC_ADD_NEW_I8 (base, reg),
+reg: OP_ATOMIC_ADD_NEW_I4 (base, reg),
+reg: OP_ATOMIC_ADD_I8 (base, reg),
+reg: OP_ATOMIC_ADD_I4 (base, reg) {
+ tree->inst_basereg = state->left->tree->inst_basereg;
+ tree->inst_offset = state->left->tree->inst_offset;
+ tree->dreg = state->reg1;
+ tree->sreg2 = state->right->reg1;
+
+ mono_bblock_add_inst (s->cbb, tree);
+}
+
+reg: OP_ATOMIC_EXCHANGE_I8 (base, reg),
+reg: OP_ATOMIC_EXCHANGE_I4 (base, reg) {
+ 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);
+}
+
+reg: OP_LSHL (reg, reg),
+reg: OP_LSHR (reg, reg),
+reg: OP_LSHR_UN (reg, reg),
+reg: OP_LMUL (reg, reg),
+reg: OP_LDIV (reg, reg),
+reg: OP_LDIV_UN (reg, reg),
+reg: OP_LREM (reg, reg),
+reg: OP_LREM_UN (reg, reg),
+reg: OP_LMUL_OVF (reg, reg),
+reg: OP_LMUL_OVF_UN (reg, reg) "0" {
+ MONO_EMIT_BIALU (s, tree, tree->opcode, state->reg1, state->left->reg1, state->right->reg1);
+}
+
+reg: OP_LSHL (reg, OP_ICONST) {
+ MONO_EMIT_BIALU_IMM (s, tree, OP_LSHL_IMM, state->reg1, state->left->reg1, state->right->tree->inst_c0);
+} cost {
+ MBCOND (mono_arch_is_inst_imm (state->right->tree->inst_c0));
+ return 0;
+}
+
+reg: OP_LSHR (reg, OP_ICONST) {
+ MONO_EMIT_BIALU_IMM (s, tree, OP_LSHR_IMM, state->reg1, state->left->reg1, state->right->tree->inst_c0);
+} cost {
+ MBCOND (mono_arch_is_inst_imm (state->right->tree->inst_c0));
+ return 0;
+}
+
+reg: OP_LSHR_UN (reg, OP_ICONST) {
+ MONO_EMIT_BIALU_IMM (s, tree, OP_LSHR_UN_IMM, state->reg1, state->left->reg1, state->right->tree->inst_c0);
+} cost {
+ MBCOND (mono_arch_is_inst_imm (state->right->tree->inst_c0));
+ return 0;
+}
+
+reg: OP_LCONV_TO_I4 (reg) "0" {
+ /* Sign extend the value in the lower word into the upper word */
+ MONO_EMIT_BIALU_IMM (s, tree, CEE_CONV_I4, state->reg1, state->left->reg1, 0);
+}
+
+reg: OP_LCONV_TO_U4 (reg) "0" {
+ /* Clean out the upper word */
+ MONO_EMIT_BIALU_IMM (s, tree, CEE_CONV_U4, state->reg1, state->left->reg1, 0);
+}
+
+freg: OP_LCONV_TO_R8 (reg) {
+ /* FIXME: Move this inssel-long.brg */
+ tree->sreg1 = state->left->reg1;
+ tree->dreg = state->reg1;
+ mono_bblock_add_inst (s->cbb, tree);
+}
+
+freg: OP_LCONV_TO_R4 (reg) {
+ /* FIXME: Move this inssel-long.brg */
+ tree->sreg1 = state->left->reg1;
+ tree->dreg = state->reg1;
+ mono_bblock_add_inst (s->cbb, tree);
+}
+