return "<load>\t%0,%1";
}
[(set_attr "type" "multi")
- (set (attr "length") (const_int 12))])
+ (set (attr "length")
+ (symbol_ref "(is_mm_seq_cst (memmodel_from_int (INTVAL (operands[2]))) ? 12
+ : is_mm_acquire (memmodel_from_int (INTVAL (operands[2]))) ? 8
+ : 4)"))])
;; Implement atomic stores with conservative fences.
;; This allows us to be compatible with the ISA manual Table A.6 and Table A.7.
return "<store>\t%z1,%0";
}
[(set_attr "type" "multi")
- (set (attr "length") (const_int 12))])
+ (set (attr "length")
+ (symbol_ref "(is_mm_seq_cst (memmodel_from_int (INTVAL (operands[2]))) ? 12
+ : is_mm_release (memmodel_from_int (INTVAL (operands[2]))) ? 8
+ : 4)"))])
return "<load>\t%0,%1";
}
[(set_attr "type" "multi")
- (set (attr "length") (const_int 12))])
+ (set (attr "length")
+ (symbol_ref "(is_mm_seq_cst (memmodel_from_int (INTVAL (operands[2]))) ? 8
+ : 4)"))])
+
(define_insn "atomic_store_ztso<mode>"
[(set (match_operand:ANYI 0 "memory_operand" "=A")
return "<store>\t%z1,%0";
}
[(set_attr "type" "multi")
- (set (attr "length") (const_int 8))])
+ (set (attr "length")
+ (symbol_ref "(is_mm_seq_cst (memmodel_from_int (INTVAL (operands[2]))) ? 8
+ : 4)"))])
"bnez\t%4, 1b";
}
[(set_attr "type" "atomic")
- (set (attr "length") (const_int 20))])
+ (set (attr "length") (const_int 16))])
(define_insn "subword_atomic_fetch_strong_<atomic_optab>"
[(set (match_operand:SI 0 "register_operand" "=&r") ;; old value at mem
"mv\t%0, %4";
}
[(set_attr "type" "atomic")
- (set (attr "length") (const_int 20))])
+ (set (attr "length") (const_int 16))])
(define_expand "atomic_exchange<mode>"
[(match_operand:SHORT 0 "register_operand") ;; old value at mem
}
[(set_attr "type" "atomic")
(set (attr "length")
- (symbol_ref "is_mm_seq_cst(memmodel_from_int(INTVAL (operands[5]))) ? 8 : 4"))])
+ (symbol_ref "(is_mm_seq_cst (memmodel_from_int (INTVAL (operands[5]))) ? 8
+ : 4)"))])
(define_expand "atomic_compare_and_swap<mode>"
[(match_operand:SI 0 "register_operand" "") ;; bool output
}
[(set_attr "type" "atomic")
(set (attr "length")
- (symbol_ref "is_mm_seq_cst(memmodel_from_int(INTVAL (operands[5]))) ? 8 : 4"))])
+ (symbol_ref "(is_mm_seq_cst (memmodel_from_int (INTVAL (operands[5]))) ? 8
+ : 4)"))])
(define_expand "atomic_compare_and_swap<mode>"
[(match_operand:SI 0 "register_operand") ;; bool output