mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-05 06:26:02 +02:00
+ new la_asm LLVM pseudo-instruction to represent function-level inline
assembly blocks git-svn-id: trunk@34890 -
This commit is contained in:
parent
d2873e433e
commit
f3409b4c9d
@ -111,6 +111,9 @@ interface
|
|||||||
{ e.g. dst = call retsize reg (paras) }
|
{ e.g. dst = call retsize reg (paras) }
|
||||||
constructor call_size_reg_paras(callpd: tdef; dst: tregister;retsize: tdef;reg:tregister;paras: tfplist);
|
constructor call_size_reg_paras(callpd: tdef; dst: tregister;retsize: tdef;reg:tregister;paras: tfplist);
|
||||||
|
|
||||||
|
{ inline function-level assembler code and parameters }
|
||||||
|
constructor asm_paras(asmlist: tasmlist; paras: tfplist);
|
||||||
|
|
||||||
procedure loadoper(opidx: longint; o: toper); override;
|
procedure loadoper(opidx: longint; o: toper); override;
|
||||||
procedure clearop(opidx: longint); override;
|
procedure clearop(opidx: longint); override;
|
||||||
procedure loadtai(opidx: longint; _ai: tai);
|
procedure loadtai(opidx: longint; _ai: tai);
|
||||||
@ -1059,4 +1062,13 @@ uses
|
|||||||
loadparas(4,paras);
|
loadparas(4,paras);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
constructor taillvm.asm_paras(asmlist: tasmlist; paras: tfplist);
|
||||||
|
begin
|
||||||
|
create_llvm(la_asmblock);
|
||||||
|
ops:=2;
|
||||||
|
loadasmlist(0,asmlist);
|
||||||
|
loadparas(1,paras);
|
||||||
|
end;
|
||||||
|
|
||||||
end.
|
end.
|
||||||
|
@ -61,7 +61,8 @@ interface
|
|||||||
{ fpc pseudo opcodes }
|
{ fpc pseudo opcodes }
|
||||||
'type', { type definition }
|
'type', { type definition }
|
||||||
'invalid1', { la_x_to_inttoptr }
|
'invalid1', { la_x_to_inttoptr }
|
||||||
'invalid2' { la_ptrtoint_to_x }
|
'invalid2', { la_ptrtoint_to_x }
|
||||||
|
'asm' { la_asmblock }
|
||||||
);
|
);
|
||||||
|
|
||||||
llvm_cond2str : array[topcmp] of ansistring = ('',
|
llvm_cond2str : array[topcmp] of ansistring = ('',
|
||||||
|
@ -69,7 +69,8 @@ interface
|
|||||||
{ fpc pseudo opcodes }
|
{ fpc pseudo opcodes }
|
||||||
la_type, { type definition }
|
la_type, { type definition }
|
||||||
la_x_to_inttoptr, { have to convert something first to int before it can be converted to a pointer }
|
la_x_to_inttoptr, { have to convert something first to int before it can be converted to a pointer }
|
||||||
la_ptrtoint_to_x { have to convert a pointer first to int before it can be converted to something else }
|
la_ptrtoint_to_x, { have to convert a pointer first to int before it can be converted to something else }
|
||||||
|
la_asmblock
|
||||||
);
|
);
|
||||||
|
|
||||||
tllvmvalueextension = (lve_none, lve_zeroext, lve_signext);
|
tllvmvalueextension = (lve_none, lve_zeroext, lve_signext);
|
||||||
|
Loading…
Reference in New Issue
Block a user