Skip to content

Commit f504e73

Browse files
committed
wip
1 parent ee538a0 commit f504e73

File tree

1 file changed

+74
-0
lines changed

1 file changed

+74
-0
lines changed

cranelift/codegen/src/isa/s390x/lower.isle

+74
Original file line numberDiff line numberDiff line change
@@ -3844,6 +3844,80 @@
38443844
(add_logical_mem_zext32_with_flags_paired ty y (sink_uload32 x))
38453845
(trap_if_impl (mask_as_cond 3) tc)))
38463846

3847+
;;;; Rules for `uadd_overflow` ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3848+
3849+
(rule 0 (lower (has_type (fits_in_64 ty) (uadd_overflow x y)))
3850+
(let ((sum XReg (add_logical_mem_with_flags_paired ty x y))
3851+
(one XReg (imm $I8 1))
3852+
(overflow XReg (gen_select_xreg (mask_as_cond 3) one (zero_reg))))
3853+
(output_pair
3854+
(value_reg sum)
3855+
(value_reg overflow_flag))))
3856+
3857+
(rule 1 (lower (has_type (fits_in_64 ty) (uadd_overflow x (sinkable_uload32 y))))
3858+
(let ((sum XReg (add_logical_mem_zext32_with_flags_paired ty x (sink_uload32 y)))
3859+
(one XReg (imm $I8 1))
3860+
(overflow XReg (gen_select_xreg (mask_as_cond 3) one (zero_reg))))
3861+
(output_pair
3862+
(value_reg sum)
3863+
(value_reg overflow))))
3864+
3865+
(rule 2 (lower (has_type (fits_in_64 ty) (uadd_overflow x (sinkable_load_32_64 y))))
3866+
(let ((sum XReg (add_logical_mem_with_flags_paired ty x (sink_load y)))
3867+
(one XReg (imm $I8 1))
3868+
(overflow XReg (gen_select_xreg (mask_as_cond 3) one (zero_reg))))
3869+
(output_pair
3870+
(value_reg sum)
3871+
(value_reg overflow))))
3872+
3873+
(rule 3 (lower (has_type (fits_in_64 ty) (uadd_overflow x (u32_from_value y))))
3874+
(let ((sum XReg (add_logical_zimm32_with_flags_paired ty x y))
3875+
(one XReg (imm $I8 1))
3876+
(overflow XReg (gen_select_xreg (mask_as_cond 3) one (zero_reg))))
3877+
(output_pair
3878+
(value_reg sum)
3879+
(value_reg overflow))))
3880+
3881+
(rule 4 (lower (has_type (fits_in_64 ty) (uadd_overflow x (zext32_value y))))
3882+
(let ((sum XReg (add_logical_reg_zext32_with_flags_paired ty x y))
3883+
(one XReg (imm $I8 1))
3884+
(overflow XReg (gen_select_xreg (mask_as_cond 3) one (zero_reg))))
3885+
(output_pair
3886+
(value_reg sum)
3887+
(value_reg overflow))))
3888+
3889+
(rule 5 (lower (has_type (fits_in_64 ty) (uadd_overflow (sinkable_uload32 x) y)))
3890+
(let ((sum XReg (add_logical_mem_zext32_with_flags_paired ty y (sink_uload32 x)))
3891+
(one XReg (imm $I8 1))
3892+
(overflow XReg (gen_select_xreg (mask_as_cond 3) one (zero_reg))))
3893+
(output_pair
3894+
(value_reg sum)
3895+
(value_reg overflow))))
3896+
3897+
(rule 6 (lower (has_type (fits_in_64 ty) (uadd_overflow (sinkable_load_32_64 x) y)))
3898+
(let ((sum XReg (add_logical_mem_with_flags_paired ty y (sink_load x)))
3899+
(one XReg (imm $I8 1))
3900+
(overflow XReg (gen_select_xreg (mask_as_cond 3) one (zero_reg))))
3901+
(output_pair
3902+
(value_reg sum)
3903+
(value_reg overflow))))
3904+
3905+
(rule 7 (lower (has_type (fits_in_64 ty) (uadd_overflow (u32_from_value x) y)))
3906+
(let ((sum XReg (add_logical_zimm32_with_flags_paired ty y x))
3907+
(one XReg (imm $I8 1))
3908+
(overflow XReg (gen_select_xreg (mask_as_cond 3) one (zero_reg))))
3909+
(output_pair
3910+
(value_reg sum)
3911+
(value_reg overflow))))
3912+
3913+
(rule 8 (lower (has_type (fits_in_64 ty) (uadd_overflow (zext32_value x) y)))
3914+
(let ((sum XReg (add_logical_reg_zext32_with_flags_paired ty y x))
3915+
(one XReg (imm $I8 1))
3916+
(overflow XReg (gen_select_xreg (mask_as_cond 3) one (zero_reg))))
3917+
(output_pair
3918+
(value_reg sum)
3919+
(value_reg overflow))))
3920+
38473921
;;;; Rules for `return` ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
38483922

38493923
(rule (lower (return args))

0 commit comments

Comments
 (0)