From 696bd9d2906e79bdfa11bc18e4b2de0521f6e996 Mon Sep 17 00:00:00 2001 From: Xavier Leroy Date: Tue, 22 Aug 2017 16:19:32 +0200 Subject: 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. --- arm/TargetPrinter.ml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'arm/TargetPrinter.ml') 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; -- cgit