Browse Source
refactor: using emit_cmp helper to refactor lowering of selection ins… (#7344)
* refactor: using emit_cmp helper to refactor lowering of selection instruction on x64
* chore: remove space before paran
pull/7386/head
Steven
1 year ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with
5 additions and
2 deletions
-
cranelift/codegen/src/isa/x64/lower.isle
|
|
@ -2082,8 +2082,7 @@ |
|
|
|
;; than one instruction for certain types (e.g., XMM-held, I128). |
|
|
|
|
|
|
|
(rule (lower (has_type ty (select (maybe_uextend (icmp cc a @ (value_type (fits_in_64 a_ty)) b)) x y))) |
|
|
|
(let ((size OperandSize (raw_operand_size_of_type a_ty))) |
|
|
|
(with_flags (x64_cmp size b a) (cmove_from_values ty cc x y)))) |
|
|
|
(lower_select_icmp ty (emit_cmp cc a b) x y)) |
|
|
|
|
|
|
|
;; Finally, we lower `select` from a condition value `c`. These rules are meant |
|
|
|
;; to be the final, default lowerings if no other patterns matched above. |
|
|
@ -2099,6 +2098,10 @@ |
|
|
|
(let ((cond_result IcmpCondResult (cmp_zero_i128 (CC.Z) c))) |
|
|
|
(select_icmp cond_result x y))) |
|
|
|
|
|
|
|
(decl lower_select_icmp (Type IcmpCondResult Value Value) InstOutput) |
|
|
|
(rule (lower_select_icmp ty (IcmpCondResult.Condition flags cc) x y) |
|
|
|
(with_flags flags (cmove_from_values ty cc x y))) |
|
|
|
|
|
|
|
;; Specializations for floating-point compares to generate a `mins*` or a |
|
|
|
;; `maxs*` instruction. These are equivalent to the "pseudo-m{in,ax}" |
|
|
|
;; specializations for vectors. |
|
|
|