aboutsummaryrefslogtreecommitdiffstats
path: root/arm/TargetPrinter.ml
diff options
context:
space:
mode:
authorXavier Leroy <xavier.leroy@inria.fr>2017-08-22 16:19:32 +0200
committerXavier Leroy <xavier.leroy@inria.fr>2017-08-22 16:19:32 +0200
commit696bd9d2906e79bdfa11bc18e4b2de0521f6e996 (patch)
tree26a0d98d26ccd3bffa121eed5ea89f6e3de49c72 /arm/TargetPrinter.ml
parent0f41d864e06409a55976b3a69ab5deb127def42a (diff)
downloadcompcert-kvx-696bd9d2906e79bdfa11bc18e4b2de0521f6e996.tar.gz
compcert-kvx-696bd9d2906e79bdfa11bc18e4b2de0521f6e996.zip
ARM in Thumb mode: simpler instruction sequence for Pbtbl pseudo, continued
A 16-bit "nop" is needed because in "add pc, r14" pc reads as the address of the add instruction plus 4, and "add pc, r14" has a 16-bit encoding.
Diffstat (limited to 'arm/TargetPrinter.ml')
-rw-r--r--arm/TargetPrinter.ml3
1 files changed, 2 insertions, 1 deletions
diff --git a/arm/TargetPrinter.ml b/arm/TargetPrinter.ml
index b95a600b..89215f71 100644
--- a/arm/TargetPrinter.ml
+++ b/arm/TargetPrinter.ml
@@ -706,7 +706,8 @@ struct
| Pbtbl(r, tbl) ->
if !Clflags.option_mthumb then begin
fprintf oc " lsl r14, %a, #2\n" ireg r;
- fprintf oc " add pc, r14\n";
+ fprintf oc " add pc, r14\n"; (* 16-bit encoding *)
+ fprintf oc " nop\n"; (* 16-bit encoding *)
List.iter
(fun l -> fprintf oc " b.w %a\n" print_label l)
tbl;