Revision 14da5302
Added by Xavier Thirioux over 5 years ago
src/backends/C/c_backend_common.ml | ||
---|---|---|
110 | 110 |
|
111 | 111 |
let pp_mod pp_val v1 v2 fmt = |
112 | 112 |
if !Options.integer_div_euclidean then |
113 |
(* (a mod_C b) + (a < 0 ? abs(b) : 0) *) |
|
114 |
Format.fprintf fmt "((%a %% %a) + (%a < 0?(abs(%a)):0))"
|
|
113 |
(* (a mod_C b) + (a mod_C b < 0 ? abs(b) : 0) *)
|
|
114 |
Format.fprintf fmt "((%a %% %a) + ((%a %% %a) < 0?(abs(%a)):0))"
|
|
115 | 115 |
pp_val v1 pp_val v2 |
116 | 116 |
pp_val v1 pp_val v2 |
117 |
pp_val v2 |
|
117 | 118 |
else (* Regular behavior: printing a % *) |
118 | 119 |
Format.fprintf fmt "(%a %% %a)" pp_val v1 pp_val v2 |
119 | 120 |
|
120 | 121 |
let pp_div pp_val v1 v2 fmt = |
121 | 122 |
if !Options.integer_div_euclidean then |
122 |
(* (a - ((a mod_C b) + (a < 0 ? abs(b) : 0))) div_C b *) |
|
123 |
Format.fprintf fmt "(%a - ((%a %% %a) + (%a < 0 ? abs(%a) : 0))) / %a" |
|
124 |
pp_val v1 pp_val v1 pp_val v2 |
|
125 |
pp_val v1 pp_val v2 pp_val v2 |
|
123 |
(* (a - ((a mod_C b) + (a mod_C b < 0 ? abs(b) : 0))) div_C b *) |
|
124 |
Format.fprintf fmt "(%a - ((%a %% %a) + ((%a %% %a) < 0 ? abs(%a) : 0))) / %a" |
|
125 |
pp_val v1 |
|
126 |
pp_val v1 pp_val v2 |
|
127 |
pp_val v1 pp_val v2 |
|
128 |
pp_val v2 |
|
129 |
pp_val v2 |
|
126 | 130 |
else (* Regular behavior: printing a / *) |
127 | 131 |
Format.fprintf fmt "(%a / %a)" pp_val v1 pp_val v2 |
128 | 132 |
|
Also available in: Unified diff
corrected euclidean division in C code