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. --- Changelog | 4 ++++ arm/TargetPrinter.ml | 9 +++------ 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/Changelog b/Changelog index a084f9d5..f4470193 100644 --- a/Changelog +++ b/Changelog @@ -1,3 +1,7 @@ +Code generation and optimization: +- ARM in Thumb mode: simpler instruction sequence for branch through jump table. + +Bug fixing: - Issue #P25: make sure sizeof(long double) = sizeof(double) in all contexts. 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