mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-16 01:39:27 +02:00
* handle int_to_bool for qwordbools correctly on arm
git-svn-id: trunk@19933 -
This commit is contained in:
parent
659b386f02
commit
862f9dacea
@ -215,6 +215,7 @@ implementation
|
||||
|
||||
procedure tarmtypeconvnode.second_int_to_bool;
|
||||
var
|
||||
hreg1,
|
||||
hregister : tregister;
|
||||
href : treference;
|
||||
resflags : tresflags;
|
||||
@ -311,10 +312,27 @@ implementation
|
||||
end;
|
||||
{ load flags to register }
|
||||
location_reset(location,LOC_REGISTER,def_cgsize(resultdef));
|
||||
location.register:=cg.getintregister(current_asmdata.CurrAsmList,location.size);
|
||||
cg.g_flags2reg(current_asmdata.CurrAsmList,location.size,resflags,location.register);
|
||||
hreg1:=cg.getintregister(current_asmdata.CurrAsmList,location.size);
|
||||
cg.g_flags2reg(current_asmdata.CurrAsmList,location.size,resflags,hreg1);
|
||||
if (is_cbool(resultdef)) then
|
||||
cg.a_op_reg_reg(current_asmdata.CurrAsmList,OP_NEG,location.size,location.register,location.register);
|
||||
cg.a_op_reg_reg(current_asmdata.CurrAsmList,OP_NEG,location.size,hreg1,hreg1);
|
||||
|
||||
{$ifndef cpu64bitalu}
|
||||
if (location.size in [OS_64,OS_S64]) then
|
||||
begin
|
||||
location.register64.reglo:=hreg1;
|
||||
location.register64.reghi:=cg.getintregister(current_asmdata.CurrAsmList,OS_32);
|
||||
if (is_cbool(resultdef)) then
|
||||
{ reglo is either 0 or -1 -> reghi has to become the same }
|
||||
cg.a_load_reg_reg(current_asmdata.CurrAsmList,OS_32,OS_32,location.register64.reglo,location.register64.reghi)
|
||||
else
|
||||
{ unsigned }
|
||||
cg.a_load_const_reg(current_asmdata.CurrAsmList,OS_32,0,location.register64.reghi);
|
||||
end
|
||||
else
|
||||
{$endif cpu64bitalu}
|
||||
location.register:=hreg1;
|
||||
|
||||
current_procinfo.CurrTrueLabel:=oldTrueLabel;
|
||||
current_procinfo.CurrFalseLabel:=oldFalseLabel;
|
||||
end;
|
||||
|
@ -10,10 +10,14 @@ program qwordbool_test_02;
|
||||
// Sample:
|
||||
//
|
||||
function qbool_result(something:integer):qwordbool;
|
||||
begin qbool_result:=(something<>0);
|
||||
end;
|
||||
begin
|
||||
qbool_result:=(something<>0);
|
||||
end;
|
||||
|
||||
var test:boolean;
|
||||
begin test:=qbool_result(123); //here(17,13) Fatal: Internal error 200410105
|
||||
writeln(test);
|
||||
end.
|
||||
begin
|
||||
test:=qbool_result(123); //here(17,13) Fatal: Internal error 200410105
|
||||
if not(test) then
|
||||
halt(1);
|
||||
writeln('ok');
|
||||
end.
|
||||
|
Loading…
Reference in New Issue
Block a user