LOC_REGISTER,
LOC_CREGISTER :
begin
{$ifdef cpu64bitalu}
if (para.size in [OS_128,OS_S128,OS_F128]) and
({ in case of fpu emulation, or abi's that pass fpu values
via integer registers }
(vardef.typ=floatdef) or
is_methodpointer(vardef) or
is_record(vardef)) then
begin
case paraloc^.loc of
LOC_REGISTER:
begin
if not assigned(paraloc^.next) then
internalerror(200410104);
if (target_info.endian=ENDIAN_BIG) then
begin
{ paraloc^ -> high
paraloc^.next -> low }
unget_para(paraloc^);
gen_alloc_regloc(list,destloc);
{ reg->reg, alignment is irrelevant }
cg.a_load_cgparaloc_anyreg(list,OS_64,paraloc^,destloc.register128.reghi,8);
unget_para(paraloc^.next^);
cg.a_load_cgparaloc_anyreg(list,OS_64,paraloc^.next^,destloc.register128.reglo,8);
end
else
begin
{ paraloc^ -> low
paraloc^.next -> high }
unget_para(paraloc^);
gen_alloc_regloc(list,destloc);
cg.a_load_cgparaloc_anyreg(list,OS_64,paraloc^,destloc.register128.reglo,8);
unget_para(paraloc^.next^);
cg.a_load_cgparaloc_anyreg(list,OS_64,paraloc^.next^,destloc.register128.reghi,8);
end;
end;
LOC_REFERENCE:
begin
gen_alloc_regloc(list,destloc);
reference_reset_base(href,paraloc^.reference.index,paraloc^.reference.offset,para.alignment);
cg128.a_load128_ref_reg(list,href,destloc.register128);
unget_para(paraloc^);
end;
else
internalerror(2012090607);
end
end
else
{$else cpu64bitalu}
It may be problem in 64bit compiler.