aarch64: Use unsigned constants where appropriate (#5423)

The Rust type expected in these locations is unsigned, but these
constants are negative. ISLE currently emits a Rust expression with
extra type conversions in order to make this work as intended.

However, across all backends, only these three aarch64 constants use
this particular "feature" of ISLE, and I want to make it go away.
This commit is contained in:
Jamey Sharp
2022-12-13 15:08:40 -08:00
committed by GitHub
parent 3ce896f69d
commit eba6b76511

View File

@@ -3265,14 +3265,14 @@
(fpu_to_int op src)) (fpu_to_int op src))
(rule (fpu_to_int_cvt_sat op src $false (fits_in_16 out_ty)) (rule (fpu_to_int_cvt_sat op src $false (fits_in_16 out_ty))
(let ((result Reg (fpu_to_int op src)) (let ((result Reg (fpu_to_int op src))
(max Reg (imm out_ty (ImmExtend.Zero) -1))) (max Reg (imm out_ty (ImmExtend.Zero) (ty_mask out_ty))))
(with_flags_reg (with_flags_reg
(cmp (OperandSize.Size32) result max) (cmp (OperandSize.Size32) result max)
(csel (Cond.Hi) max result)))) (csel (Cond.Hi) max result))))
(rule (fpu_to_int_cvt_sat op src $true (fits_in_16 out_ty)) (rule (fpu_to_int_cvt_sat op src $true (fits_in_16 out_ty))
(let ((result Reg (fpu_to_int op src)) (let ((result Reg (fpu_to_int op src))
(max Reg (imm $I32 (ImmExtend.Sign) (signed_max out_ty))) (max Reg (signed_max out_ty))
(min Reg (imm $I32 (ImmExtend.Sign) (signed_min out_ty))) (min Reg (signed_min out_ty))
(result Reg (with_flags_reg (result Reg (with_flags_reg
(cmp (operand_size out_ty) result max) (cmp (operand_size out_ty) result max)
(csel (Cond.Gt) max result))) (csel (Cond.Gt) max result)))
@@ -3281,13 +3281,13 @@
(csel (Cond.Lt) min result)))) (csel (Cond.Lt) min result))))
result)) result))
(decl signed_min (Type) u64) (decl signed_min (Type) Reg)
(rule (signed_min $I8) -128) (rule (signed_min $I8) (imm $I8 (ImmExtend.Sign) 0x80))
(rule (signed_min $I16) -32768) (rule (signed_min $I16) (imm $I16 (ImmExtend.Sign) 0x8000))
(decl signed_max (Type) u64) (decl signed_max (Type) Reg)
(rule (signed_max $I8) 127) (rule (signed_max $I8) (imm $I8 (ImmExtend.Sign) 0x7F))
(rule (signed_max $I16) 32767) (rule (signed_max $I16) (imm $I16 (ImmExtend.Sign) 0x7FFF))
(decl fpu_to_int (FpuToIntOp Reg) Reg) (decl fpu_to_int (FpuToIntOp Reg) Reg)
(rule (fpu_to_int op src) (rule (fpu_to_int op src)