Lines Matching refs:nregs
51 let rec initial_offset addrmode nregs =
55 | DA -> -4 * nregs + 4
56 | DB -> -4 * nregs
58 let rec final_offset addrmode nregs =
60 IA -> nregs * 4
61 | IB -> nregs * 4
62 | DA -> -4 * nregs
63 | DB -> -4 * nregs
74 let destreg nregs first op_type thumb =
76 Printf.sprintf "(match_dup %d)" (nregs + 1)
79 (nregs + 1) (inout_constr op_type) (constr thumb)
84 let write_ldm_set thumb nregs offset opnr first =
90 Printf.printf "%s" (destreg nregs first IN thumb);
94 let write_stm_set thumb nregs offset opnr first =
99 Printf.printf "%s" (destreg nregs first IN thumb);
103 let write_ldm_peep_set extra_indent nregs opnr first =
107 Printf.printf "%s (match_operand:SI %d \"memory_operand\" \"\"))" indent (nregs + opnr)
109 let write_stm_peep_set extra_indent nregs opnr first =
112 Printf.printf "(set (match_operand:SI %d \"memory_operand\" \"\")\n" (nregs + opnr);
115 let write_any_load optype nregs opnr first =
119 Printf.printf "%s (match_operand:SI %d \"%s\" \"\"))" indent (nregs * 2 + opnr) optype
121 let write_const_store nregs opnr first =
123 Printf.printf "%s(set (match_operand:SI %d \"memory_operand\" \"\")\n" indent (nregs + opnr);
126 let write_const_stm_peep_set nregs opnr first =
127 write_any_load "const_int_operand" nregs opnr first;
129 write_const_store nregs opnr false
173 let write_pattern_1 name ls addrmode nregs write_set_fn update thumb =
176 (if thumb then "thumb_" else "") name nregs astr
182 (destreg nregs true INOUT thumb) (destreg nregs false IN thumb);
184 (final_offset addrmode nregs)
188 (write_set_fn thumb nregs) 1
189 (initial_offset addrmode nregs)
190 (not update) nregs;
193 (if update then nregs + 1 else nregs);
195 Printf.printf " \"%s%s\\t%%%d%s, {" name astr (nregs + 1) (if update then "!" else "")
197 Printf.printf " \"%s%s%%?\\t%%%d%s, {" name astr (nregs + 1) (if update then "!" else "");
198 for n = 1 to nregs; do
199 Printf.printf "%%%d%s" n (if n < nregs then ", " else "")
202 Printf.printf " [(set_attr \"type\" \"%s%d\")" ls nregs;
210 let write_ldm_pattern addrmode nregs update =
211 write_pattern_1 "ldm" "load" addrmode nregs write_ldm_set update false;
213 write_pattern_1 "ldm" "load" addrmode nregs write_ldm_set update true;
216 let write_stm_pattern addrmode nregs update =
217 write_pattern_1 "stm" "store" addrmode nregs write_stm_set update false;
219 write_pattern_1 "stm" "store" addrmode nregs write_stm_set update true;
223 let nregs = 2 in
225 write_peep_sets (write_ldm_peep_set "" nregs) 0 true nregs;
228 Printf.printf "\n%s(set (match_operand:SI %d \"s_register_operand\" \"\")\n" indent (nregs * 2);
229 Printf.printf "%s (match_operator:SI %d \"commutative_binary_operator\"\n" indent (nregs * 2 + 1);
230 Printf.printf "%s [(match_operand:SI %d \"s_register_operand\" \"\")\n" indent (nregs * 2 + 2);
231 Printf.printf "%s (match_operand:SI %d \"s_register_operand\" \"\")]))]\n" indent (nregs * 2 + 3)
234 Printf.printf "%s [(set (match_operand:SI %d \"s_register_operand\" \"\")\n" indent (nregs * 2);
235 Printf.printf "%s (match_operator:SI %d \"commutative_binary_operator\"\n" indent (nregs * 2 + 1);
236 Printf.printf "%s [(match_operand:SI %d \"s_register_operand\" \"\")\n" indent (nregs * 2 + 2);
237 Printf.printf "%s (match_operand:SI %d \"s_register_operand\" \"\")]))\n" indent (nregs * 2 + 3);
240 Printf.printf " \"((((REGNO (operands[%d]) == REGNO (operands[0]))\n" (nregs * 2 + 2);
241 Printf.printf " && (REGNO (operands[%d]) == REGNO (operands[1])))\n" (nregs * 2 + 3);
242 Printf.printf " || ((REGNO (operands[%d]) == REGNO (operands[0]))\n" (nregs * 2 + 3);
243 Printf.printf " && (REGNO (operands[%d]) == REGNO (operands[1]))))\n" (nregs * 2 + 2);
244 Printf.printf " && (peep2_regno_dead_p (%d, REGNO (operands[0]))\n" (nregs + 1);
245 Printf.printf " || (REGNO (operands[0]) == REGNO (operands[%d])))\n" (nregs * 2);
246 Printf.printf " && (peep2_regno_dead_p (%d, REGNO (operands[1]))\n" (nregs + 1);
247 Printf.printf " || (REGNO (operands[1]) == REGNO (operands[%d]))))\"\n" (nregs * 2);
251 (nregs * 2) (nregs * 2 + 1) (nregs * 2 + 2) (nregs * 2 + 3)
255 (nregs * 2) (nregs * 2 + 1) (nregs * 2 + 2) (nregs * 2 + 3);
259 Printf.printf "{\n if (!gen_ldm_seq (operands, %d, true))\n FAIL;\n" nregs;
262 let write_ldm_peephole nregs =
264 write_peep_sets (write_ldm_peep_set "" nregs) 0 true nregs;
266 Printf.printf " if (gen_ldm_seq (operands, %d, false))\n DONE;\n else\n FAIL;\n})\n\n" nregs
268 let write_ldm_peephole_b nregs =
269 if nregs > 2 then begin
271 write_ldm_peep_set "" nregs 0 true;
273 write_peep_sets (write_ldm_peep_set " " nregs) 1 true (nregs - 1);
275 Printf.printf " if (gen_ldm_seq (operands, %d, false))\n DONE;\n else\n FAIL;\n})\n\n" nregs
278 let write_stm_peephole nregs =
280 write_peep_sets (write_stm_peep_set "" nregs) 0 true nregs;
282 Printf.printf " if (gen_stm_seq (operands, %d))\n DONE;\n else\n FAIL;\n})\n\n" nregs
284 let write_stm_peephole_b nregs =
285 if nregs > 2 then begin
287 write_stm_peep_set "" nregs 0 true;
289 write_peep_sets (write_stm_peep_set "" nregs) 1 true (nregs - 1);
291 Printf.printf " if (gen_stm_seq (operands, %d))\n DONE;\n else\n FAIL;\n})\n\n" nregs
294 let write_const_stm_peephole_a nregs =
296 write_peep_sets (write_const_stm_peep_set nregs) 0 true nregs;
298 Printf.printf " if (gen_const_stm_seq (operands, %d))\n DONE;\n else\n FAIL;\n})\n\n" nregs
300 let write_const_stm_peephole_b nregs =
302 write_peep_sets (write_any_load "const_int_operand" nregs) 0 true nregs;
304 write_peep_sets (write_const_store nregs) 0 false nregs;
306 Printf.printf " if (gen_const_stm_seq (operands, %d))\n DONE;\n else\n FAIL;\n})\n\n" nregs