+ implemented thlcgcpu.a_op_const_reg with far pointer support for i8086, so

that second_class_to_intf can be converted to the high level code generator

git-svn-id: trunk@32301 -
This commit is contained in:
nickysn 2015-11-12 22:01:44 +00:00
parent f0c6d40336
commit ad92f4e80a

View File

@ -74,6 +74,8 @@ interface
procedure a_load_loc_ref(list : TAsmList;fromsize, tosize: tdef; const loc: tlocation; const ref : treference);override;
procedure a_loadaddr_ref_reg(list : TAsmList;fromsize, tosize : tdef;const ref : treference;r : tregister);override;
procedure a_op_const_reg(list : TAsmList; Op: TOpCG; size: tdef; a: tcgint; reg: TRegister); override;
procedure g_copyvaluepara_openarray(list: TAsmList; const ref: treference; const lenloc: tlocation; arrdef: tarraydef; destreg: tregister); override;
procedure g_releasevaluepara_openarray(list: TAsmList; arrdef: tarraydef; const l: tlocation); override;
@ -380,6 +382,22 @@ implementation
end;
procedure thlcgcpu.a_op_const_reg(list: TAsmList; Op: TOpCG; size: tdef; a: tcgint; reg: TRegister);
begin
{ implicit pointer types on i8086 follow the default data pointer size for
the current memory model }
if is_implicit_pointer_object_type(size) or is_implicit_array_pointer(size) then
size:=voidpointertype;
if is_hugepointer(size) then
internalerror(2015111201)
else if is_farpointer(size) then
cg.a_op_const_reg(list,Op,OS_16,a,reg)
else
inherited a_op_const_reg(list,Op,size,a,reg);
end;
procedure thlcgcpu.g_copyvaluepara_openarray(list: TAsmList; const ref: treference; const lenloc: tlocation; arrdef: tarraydef; destreg: tregister);
begin
if paramanager.use_fixed_stack then