summaryrefslogtreecommitdiff
path: root/gcc/config/arm/arm-ldmstm.ml
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/config/arm/arm-ldmstm.ml')
-rw-r--r--gcc/config/arm/arm-ldmstm.ml7
1 files changed, 6 insertions, 1 deletions
diff --git a/gcc/config/arm/arm-ldmstm.ml b/gcc/config/arm/arm-ldmstm.ml
index 2bc9702bee2..e615437b125 100644
--- a/gcc/config/arm/arm-ldmstm.ml
+++ b/gcc/config/arm/arm-ldmstm.ml
@@ -146,12 +146,15 @@ let can_thumb addrmode update is_store =
| IA, true, true -> true
| _ -> false
+exception InvalidAddrMode of string;;
+
let target addrmode thumb =
match addrmode, thumb with
IA, true -> "TARGET_THUMB1"
| IA, false -> "TARGET_32BIT"
| DB, false -> "TARGET_32BIT"
| _, false -> "TARGET_ARM"
+ | _, _ -> raise (InvalidAddrMode "ERROR: Invalid Addressing mode for Thumb1.")
let write_pattern_1 name ls addrmode nregs write_set_fn update thumb =
let astr = string_of_addrmode addrmode in
@@ -181,8 +184,10 @@ let write_pattern_1 name ls addrmode nregs write_set_fn update thumb =
done;
Printf.printf "}\"\n";
Printf.printf " [(set_attr \"type\" \"%s%d\")" ls nregs;
- begin if not thumb then
+ if not thumb then begin
Printf.printf "\n (set_attr \"predicable\" \"yes\")";
+ if addrmode == IA || addrmode == DB then
+ Printf.printf "\n (set_attr \"predicable_short_it\" \"no\")";
end;
Printf.printf "])\n\n"