From 672393ef623acb3e230a8019d51c87e051a7567a Mon Sep 17 00:00:00 2001 From: Michael Schmidt Date: Fri, 13 May 2016 13:11:50 +0200 Subject: bug 18925, fix loading of symbols for thumb: :lower16: and :upper16: are restricted to 15bit signed immediate offsets --- 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 4120b188..d2ea16f7 100644 --- a/arm/TargetPrinter.ml +++ b/arm/TargetPrinter.ml @@ -239,7 +239,8 @@ module Target (Opt: PRINTER_OPTIONS) : TARGET = (* Generate code to load the address of id + ofs in register r *) let loadsymbol oc r id ofs = - if !Clflags.option_mthumb then begin + let o = camlint_of_coqint ofs in + if o >= -32768l && o <= 32767l && !Clflags.option_mthumb then begin fprintf oc " movw %a, #:lower16:%a\n" ireg r symbol_offset (id, ofs); fprintf oc " movt %a, #:upper16:%a\n" -- cgit