From 0f41d864e06409a55976b3a69ab5deb127def42a Mon Sep 17 00:00:00 2001 From: Xavier Leroy Date: Tue, 22 Aug 2017 15:52:58 +0200 Subject: ARM in Thumb mode: simpler instruction sequence for Pbtbl pseudo It is also easier to recognize than the old one for binary analysis tools. --- arm/TargetPrinter.ml | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) (limited to 'arm/TargetPrinter.ml') diff --git a/arm/TargetPrinter.ml b/arm/TargetPrinter.ml index 1dfe8af6..b95a600b 100644 --- a/arm/TargetPrinter.ml +++ b/arm/TargetPrinter.ml @@ -705,15 +705,12 @@ struct (neg_condition_name cond) ireg r1 shift_op ifnot; 2 | Pbtbl(r, tbl) -> if !Clflags.option_mthumb then begin - let lbl = new_label() in - fprintf oc " adr r14, .L%d\n" lbl; - fprintf oc " add r14, r14, %a, lsl #2\n" ireg r; - fprintf oc " mov pc, r14\n"; - fprintf oc ".L%d:\n" lbl; + fprintf oc " lsl r14, %a, #2\n" ireg r; + fprintf oc " add pc, r14\n"; List.iter (fun l -> fprintf oc " b.w %a\n" print_label l) tbl; - 3 + List.length tbl + 2 + List.length tbl end else begin fprintf oc " add pc, pc, %a, lsl #2\n" ireg r; fprintf oc " nop\n"; -- cgit