diff --git a/compiler/arm/aasmcpu.pas b/compiler/arm/aasmcpu.pas index 114251979c..682e3e5b8f 100644 --- a/compiler/arm/aasmcpu.pas +++ b/compiler/arm/aasmcpu.pas @@ -469,7 +469,9 @@ implementation begin { pc relative symbol? } curdatatai:=tai(taicpu(curtai).oper[curop]^.ref^.symboldata); - if assigned(curdatatai) then + if assigned(curdatatai) and + { move only if we're at the first reference of a label } + (taicpu(curtai).oper[curop]^.ref^.offset=0) then begin { if yes, insert till next symbol } repeat diff --git a/compiler/arm/narmadd.pas b/compiler/arm/narmadd.pas index 5b53c9fd29..b9ecaeb716 100644 --- a/compiler/arm/narmadd.pas +++ b/compiler/arm/narmadd.pas @@ -33,6 +33,7 @@ interface private function GetResFlags(unsigned:Boolean):TResFlags; protected + function pass_1 : tnode;override; procedure second_addfloat;override; procedure second_cmpfloat;override; procedure second_cmpordinal;override; @@ -300,6 +301,21 @@ interface end; + function tarmaddnode.pass_1 : tnode; + begin + result:=inherited pass_1; + + { handling boolean expressions } + if not(assigned(result)) and + ( + not(is_boolean(left.resulttype.def)) or + not(is_boolean(right.resulttype.def)) or + is_dynamic_array(left.resulttype.def) + ) then + expectloc:=LOC_FLAGS; + end; + + procedure tarmaddnode.second_cmpordinal; var unsigned : boolean;